이 글은 주로 PHP에서 Single Sign-On의 세션 제어를 소개합니다. 이제는 모든 사람과 공유합니다. 필요한 친구들이 참고할 수 있습니다.
1 간단히 session을 사용하세요.
Session_start가 필요합니다. () 세션 열기
구현할 데모 작성
새 session.php를 생성하세요
<?php session_start(); //使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了 $_SESSION['username'] = 'admin'; //存储session信息为键为username值为admin的一对数据 ?>
새 getsession.php를 생성하고 값을 가져오세요
<?php session_start(); //使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了 echo $_SESSION['username']; //取出在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['sid'])){ //setcookie('名字','值','有效期','域名'); $sid = $_GET['sid']; //setcookie('PHPSESSID' , $sid); //设置sessionID //或者我们还可以用另一种方式 session_id($sid); //开启session之前 指定一个sessionid } session_start(); echo $_SESSION['username']; ?>
이 방법으로 두 도메인 이름 기반의 도메인 간 문제를 해결할 수 있습니다. 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['uid'])){ echo "用户已登录,id是".$_SESSION['uid']; } else { echo "没有登录"; } ?>
세션 아래의 getsession.php 복사본을 로컬
Create 로컬 파일 아래의 login.php
<?php session_start(); $_SESSION['uid'] = 18; //存储session数据键为uid值为18的一对数据 ?>
login.php에 액세스한 다음 현재 디렉터리의 getsession.php 파일에 액세스하면 결과는 다음과 같습니다. 사용자가 로그인되었고 ID는 18입니다.
그러면 우리가 해야 할 일은 다음과 같습니다. 이제 localhost에서 login.php에 액세스하는 것입니다. 로그인할 때 www.test.com이 조용히 로그인하도록 하세요
로컬 login.php 파일을 다음 코드로 수정하세요.
<?php session_start(); $_SESSION['uid'] = 18; //存储session数据键为uid值为18的一对数据 $uid = $_SESSION['uid']; ?> <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['uid']; $_SESSION['uid'] = $uid; ?>
이 경우 www.test.com/getsession.php에 액세스하면 로그인되었다는 메시지도 표시됩니다
이런 방식으로 Jsonp를 사용합니다. 교차 도메인 요청을 구현하려면 한 웹사이트에 로그인할 때 다른 웹사이트에 동기 로그인
이상이 이 글의 전체 내용입니다. 더 많은 관련 내용을 보려면 관심을 가져주세요. PHP 중국어 웹사이트!
관련 권장 사항:
foreach 루프 후 PHP가 남긴 배열 참조 문제를 해결하는 방법
mui-silder 플러그 오류를 해결하는 방법 -in in vue+mui 드래그 앤 드롭이 안되는 문제 수정
위 내용은 PHP에서 Single Sign-On을 위한 세션 제어의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!