Heim >Backend-Entwicklung >PHP-Tutorial >Sitzungssteuerung für Single Sign-On in PHP
Dieser Artikel stellt hauptsächlich die Sitzungssteuerung von Single Sign-On vor. Er hat einen gewissen Referenzwert. Jetzt können Freunde in Not darauf verweisen.
Einfach die Sitzung verwenden 🎜>Bevor Sie die Sitzung verwenden, müssen Sie die Sitzung mit session_start() öffnen
Schreiben Sie eine Demo, um sie zu implementieren
<?php session_start(); //使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了 $_SESSION['username'] = 'admin'; //存储session信息为键为username值为admin的一对数据 ?>Erstellen Sie eine Neue getsession.php und los geht's. Holen Sie sich den Wert
<?php session_start(); //使用时必须开启,如果你在php.ini里头修改了配置那么就无需在开启session了 echo $_SESSION['username']; //取出在session里存的username的值 ?>Der von verschiedenen Browsern erhaltene Wert ist unterschiedlich, weil ihre Sitzungs-ID unterschiedlich ist. Zum Beispiel:
Ich verwende den Google-Browser, um auf session.php zuzugreifen und dann generieren Wenn eine Sitzung erstellt wird, kann ich den Wert abrufen, wenn ich mit demselben Browser auf session.php zugreife. Wenn ich erneut mit dem Firefox-Browser auf session.php zugreife, wird eine Sitzung neu generiert und ich kann den Wert abrufen, wenn Ich greife erneut auf den Wert von getsession.php zu, aber Sie werden feststellen, dass der Wert nicht derselbe ist, da die beiden Browser unterschiedliche Sitzungs-IDs haben. Wenn Sie die Sitzungs-ID von Firefox ändern, werden Sie feststellen, dass dies der Fall ist Sie sind zwei. Die Werte sind gleich, da der Sitzungswert nur die Sitzungs-ID erkennt.
Wenn wir unseren eigenen virtuellen Host auf unserem eigenen Apache/Nginx-Server konfigurieren.
Meiner ist ein Apache-Server, und Nginx ändert auch die Konfigurationsdatei ----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>Ein virtueller Host mit dem virtuellen Domänennamen www.test.com wurde eingerichtet. Denken Sie daran, Apache/nginx neu zu starten, da die Konfiguration sonst nicht wirksam wird. Was wir jetzt tun müssen, ist, die Sitzungs-IDs unter den beiden Domänennamen konsistent zu halten, zum Beispiel: www.test.com und localhost, vorausgesetzt, sie befinden sich unter demselben Server.
Lassen Sie uns eine Demo schreiben, um es zu implementieren (ohne zuerst Sicherheit und Leistung zu berücksichtigen)
<?php session_start(); //一定要先开启session $sid = session_id(); //获取到当前的sessionID ?> <a href="http://www.test.com/getsession.php?sid= <?php echo $sid;?> ">跳转</a>Wenn Sie direkt auf die Seite springen, wird es einen Fehler geben, da wir ihn nur übermittelt haben und gotsession.php ihn nicht empfangen hat, also müssen wir die Datei getsession.php ändern
<?php if (isset($_GET['sid'])){ //setcookie('名字','值','有效期','域名'); $sid = $_GET['sid']; //setcookie('PHPSESSID' , $sid); //设置sessionID //或者我们还可以用另一种方式 session_id($sid); //开启session之前 指定一个sessionid } session_start(); echo $_SESSION['username']; ?>damit wir es entsprechend der Sitzungs-ID ändern können. Die Konsistenz löst das domänenübergreifende Problem zwischen den beiden Domänennamen 3. Implementieren Sie Single Sign-On ---- was bedeutet, dass nach der Anmeldung unter localhost Sie können sich gleichzeitig unter www.test.com anmelden---- -Domainübergreifende Anfrage
Eine domänenübergreifende Anfrage kann nicht mit Ajax erreicht werden. Für eine domänenübergreifende Anfrage muss Jsonp verwendet werden.
Erstellen Sie eine lokale Datei im Verzeichnis auf derselben Ebene des Sitzungsordners, um die beiden Domänen besser unterscheiden zu können
Was wir jetzt erreichen wollen, ist, dass localhost und www.test.com miteinander kommunizieren können ----- Die Voraussetzung ist die Erstellung einer api.php unter der Sitzung auf einem Server
<?php ?>
Erstellen Sie eine index.html unter lokal
<script src="www.test.com/api.php"></script> <!-- JS代码在浏览器端执行 -->Beim Zugriff auf index.html unter lokal werden zwei Anfragen initiiert weil der darin enthaltene js-Code www.test.com/api .php anfordert
Ändern Sie die Datei getsession.php unter Sitzung in den folgenden Inhalt:
<?php session_start(); if(isset($_SESSION['uid'])){ echo "用户已登录,id是".$_SESSION['uid']; } else { echo "没有登录"; } ?>Kopieren Sie eine Kopie von getsession. php unter Sitzung zu lokalin lokal Erstellen Sie eine login.php-Datei
<?php session_start(); $_SESSION['uid'] = 18; //存储session数据键为uid值为18的一对数据 ?>Wenn wir auf login.php und dann auf die Datei getsession.php im aktuellen Verzeichnis zugreifen, ist das Ergebnis: das Der Benutzer ist angemeldet und die ID ist 18. Dann müssen wir jetzt www.test.com stillschweigend anmelden lassen, wenn auf login.php unter localhost zugegriffen wird, um sich anzumelden
Ändern Sie die Datei login.php unter localhost in den folgenden Code:
<?php session_start(); $_SESSION['uid'] = 18; //存储session数据键为uid值为18的一对数据 $uid = $_SESSION['uid']; ?> <script src="www.test.com/api.php?uid=<?php echo $uid;?>" ></script>Besuchen Sie localhost/local/login.php für die synchrone Anmeldung und besuchen Sie dann localhost/local/getsession.php und Sie sind bereits angemeldet in Besuchen Sie jetzt direkt www.test.com/getsession. Die .php-Datei ändert sich in keiner Weise, da wir die Sitzung nicht erhalten haben. Daher müssen wir die api.php-Datei unter der Sitzung in ändern Folgender Code:
<?php session_start(); $uid = $_GET['uid']; $_SESSION['uid'] = $uid; ?>Besuchen Sie in diesem Fall www.test.com/getsession. Wenn Sie PHP verwenden, werden Sie auch aufgefordert, sich anzumelden.
Auf diese Weise verwenden wir Jsonp, um Cross- zu implementieren. Domain-Anfragen. Wenn Sie sich bei einer Website anmelden, meldet sich gleichzeitig eine andere Website an zur chinesischen PHP-Website!
Verwandte Empfehlungen:
So lösen Sie das Problem, dass PHP danach zurückbleibt foreach-Schleife Array-Referenzproblem
So lösen Sie das Problem, dass das Mui-Silder-Plug-In in Vue+Mui fehlschlägt und nicht gezogen werden kann
Das obige ist der detaillierte Inhalt vonSitzungssteuerung für Single Sign-On in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!