Sitzungssteuerung für Single Sign-On in PHP

不言
Freigeben: 2023-04-02 22:52:01
Original
1231 Leute haben es durchsucht

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

Erstellen Sie eine neue session.php

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

Erstellen Sie eine Neue getsession.php und los geht's. Holen Sie sich den Wert


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

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.

Kinderschuhe können versuchen, sie zu bedienen, um zu sehen, ob sie so aussehen.

2. Domänenübergreifend

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>
Nach dem Login kopieren

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)

Erstellen Sie eine user.php und wir müssen die Sitzungs-ID unter dem aktuellen lokalen Host an www.test.com übergeben

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

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[&#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;];
?>
Nach dem Login kopieren

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
	
?>
Nach dem Login kopieren

Erstellen Sie eine index.html unter lokal

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

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[&#39;uid&#39;])){
		echo "用户已登录,id是".$_SESSION[&#39;uid&#39;];
	} else {
		echo "没有登录";	
	}
?>
Nach dem Login kopieren

Kopieren Sie eine Kopie von getsession. php unter Sitzung zu lokal

in lokal Erstellen Sie eine login.php-Datei

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

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[&#39;uid&#39;] = 18;	//存储session数据键为uid值为18的一对数据
	$uid = $_SESSION[&#39;uid&#39;];
?>
<script src="www.test.com/api.php?uid=<?php echo $uid;?>" ></script>
Nach dem Login kopieren

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[&#39;uid&#39;];
	
	$_SESSION[&#39;uid&#39;] = $uid;
?>
Nach dem Login kopieren

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:

Einführung in die Informationsverschlüsselungstechnologie in PHP

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!