>  기사  >  백엔드 개발  >  PHP에서 Single Sign-On을 위한 세션 제어

PHP에서 Single Sign-On을 위한 세션 제어

不言
不言원래의
2018-07-10 16:56:021232검색

이 글은 주로 PHP에서 Single Sign-On의 세션 제어를 소개합니다. 이제는 모든 사람과 공유합니다. 필요한 친구들이 참고할 수 있습니다.

1 간단히 session을 사용하세요.
Session_start가 필요합니다. () 세션 열기
구현할 데모 작성

새 session.php를 생성하세요

<?php
    session_start();	//使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了
    $_SESSION[&#39;username&#39;] = &#39;admin&#39;;	//存储session信息为键为username值为admin的一对数据
?>

새 getsession.php를 생성하고 값을 가져오세요

<?php
	session_start();	//使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了
	echo $_SESSION[&#39;username&#39;];	//取出在session里存的username的值
?>

브라우저마다 얻는 값이 다릅니다. 예를 들어, 세션 ID가 다르기 때문입니다.
Google 브라우저를 사용하여 session.php에 액세스한 다음 동일한 브라우저를 사용하여 getsession.php에 액세스하면 값을 얻을 수 있습니다. session.php를 다시 방문하면 세션이 다시 생성됩니다. getsession.php를 다시 방문할 때도 값을 얻을 수 있지만 세션 ID가 다른 두 브라우저이기 때문에 얻는 값이 동일하지 않다는 것을 알 수 있습니다. Firefox의 sessionID를 가져와 Google의 sessionID를 수정하면 세션 값은 sessionID만 인식하므로 두 값이 동일하다는 것을 알 수 있습니다.

어린이 신발을 작동해보고 이런 모습인지 확인해볼 수 있어요.

2. 교차 도메인
자체 Apache/nginx 서버에 자체 가상 호스트를 구성하는 경우.
광산은 Apache 서버이고 nginx는 구성 파일----vhost.conf도 수정합니다.

<VirtualHost *:80>
    DocumentRoot "H:\myphp_www\PHPTutorial\WWW\sessoin"
    ServerName www.test.com
    ServerAlias 
  <Directory "H:\myphp_www\PHPTutorial\WWW\sessoin">
      Options FollowSymLinks ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all
     Require all granted
  </Directory>
</VirtualHost>

가상 도메인 이름이 www.test.com인 가상 호스트가 설정되었습니다. Apache/nginx를 다시 시작해야 합니다. 그렇지 않으면 구성이 적용되지 않습니다.

지금 해야 할 일은 두 도메인 이름 아래의 세션 ID를 일관되게 유지하는 것입니다(예: www.test.com 및 localhost가 동일한 서버에 있는 경우).
이를 구현하기 위한 데모를 작성해 보겠습니다(보안과 성능을 먼저 고려하지 않음)

user.php를 생성하고 현재 로컬 호스트의 세션 ID를 www.test.com

<?php
	session_start();	//一定要先开启session
	$sid = session_id();		//获取到当前的sessionID
?>
<a href="http://www.test.com/getsession.php?sid= <?php echo $sid;?> ">跳转</a>

으로 전달해야 합니다. 페이지에서 전송만 했기 때문에 오류가 발생하고 getsession.php는 수신되지 않으므로 getsession.php 파일을 수정해야 합니다

<?php
	if (isset($_GET[&#39;sid&#39;])){
		//setcookie(&#39;名字&#39;,&#39;值&#39;,&#39;有效期&#39;,&#39;域名&#39;);
		$sid = $_GET[&#39;sid&#39;];
		//setcookie(&#39;PHPSESSID&#39; , $sid);	//设置sessionID
		//或者我们还可以用另一种方式
		session_id($sid);	//开启session之前 指定一个sessionid
	}
	session_start();
	echo $_SESSION[&#39;username&#39;];
?>

이 방법으로 두 도메인 이름 기반의 도메인 간 문제를 해결할 수 있습니다. sessionID의 일관성에 따라

3. 싱글 사인온 구현 - localhost에 로그인한 다음 동기적으로 www.test.com에 로그인하는 것을 의미 - 교차 도메인 요청
교차 도메인 요청은 ajax를 사용하여 달성할 수 없습니다. Jsonp에서는 필요합니다. 크로스 도메인
두 도메인을 더 잘 구별하기 위해 세션 폴더의 동일한 디렉터리에 로컬 파일을 생성합니다.
지금 우리가 달성하고자 하는 것은 localhost와 www.test.com이 통신할 수 있도록 하는 것입니다 ----- 전제는 그들이 서버에 있다는 것입니다

세션 아래에 api.php를 생성하세요

<?php
	
?>

로컬 아래에 index.html을 생성

<script src="www.test.com/api.php"></script>  <!-- JS代码在浏览器端执行 -->

로컬에서 index.html에 액세스하면 두 개의 요청이 시작됩니다. 요청 내의 js 코드 www.test.com/api.php

세션 아래의 getsession.php 파일을 다음 내용으로 수정하세요.

<?php
	session_start();
	if(isset($_SESSION[&#39;uid&#39;])){
		echo "用户已登录,id是".$_SESSION[&#39;uid&#39;];
	} else {
		echo "没有登录";	
	}
?>

세션 아래의 getsession.php 복사본을 로컬

Create 로컬 파일 아래의 login.php

<?php
	session_start();
	$_SESSION[&#39;uid&#39;] = 18;	//存储session数据键为uid值为18的一对数据
?>

login.php에 액세스한 다음 현재 디렉터리의 getsession.php 파일에 액세스하면 결과는 다음과 같습니다. 사용자가 로그인되었고 ID는 18입니다.

그러면 우리가 해야 할 일은 다음과 같습니다. 이제 localhost에서 login.php에 액세스하는 것입니다. 로그인할 때 www.test.com이 조용히 로그인하도록 하세요

로컬 login.php 파일을 다음 코드로 수정하세요.

<?php
	session_start();
	$_SESSION[&#39;uid&#39;] = 18;	//存储session数据键为uid值为18的一对数据
	$uid = $_SESSION[&#39;uid&#39;];
?>
<script src="www.test.com/api.php?uid=<?php echo $uid;?>" ></script>

동기화를 위해 localhost/local/login.php를 방문하세요. 로그인 후 localhost/local/getsession.php를 방문하세요. 이미 로그인되어 있습니다

이제 www.test.com/getsession.php 파일에 직접 액세스해도 세션을 수신하지 않았기 때문에 변경 사항이 발생하지 않으므로 다음을 수행해야 합니다. 세션 아래의 api.php 파일을 다음 코드로 수정하세요.

<?php
	session_start();
	$uid = $_GET[&#39;uid&#39;];
	
	$_SESSION[&#39;uid&#39;] = $uid;
?>

이 경우 www.test.com/getsession.php에 액세스하면 로그인되었다는 메시지도 표시됩니다
이런 방식으로 Jsonp를 사용합니다. 교차 도메인 요청을 구현하려면 한 웹사이트에 로그인할 때 다른 웹사이트에 동기 로그인

이상이 이 글의 전체 내용입니다. 더 많은 관련 내용을 보려면 관심을 가져주세요. PHP 중국어 웹사이트!

관련 권장 사항:

PHP의 정보 암호화 기술 소개

foreach 루프 후 PHP가 남긴 배열 참조 문제를 해결하는 방법

mui-silder 플러그 오류를 해결하는 방법 -in in vue+mui 드래그 앤 드롭이 안되는 문제 수정

위 내용은 PHP에서 Single Sign-On을 위한 세션 제어의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.