Heim Backend-Entwicklung PHP-Tutorial Sitzungssteuerung für Single Sign-On in PHP

Sitzungssteuerung für Single Sign-On in PHP

Jul 10, 2018 pm 04:56 PM
jsonp session

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So legen Sie das Sitzungszeitlimit in der SpringBoot-Sitzung fest So legen Sie das Sitzungszeitlimit in der SpringBoot-Sitzung fest May 15, 2023 pm 02:37 PM

Das Problem wurde im Springboot-Projekt-Produktions-Session-Out-Timeout gefunden: In der Testumgebung wurde der Session-Out durch Ändern der application.yaml konfiguriert, nachdem die Session-Out-Konfiguration überprüft wurde In Kraft trat, wurde die Ablaufzeit für die Veröffentlichung in der Produktionsumgebung direkt auf 8 Stunden festgelegt. Allerdings habe ich am Mittag die Rückmeldung von Kunden erhalten, dass die Projektablaufzeit kurz eingestellt wurde. Wenn eine halbe Stunde lang keine Aktion ausgeführt wird, läuft die Sitzung ab und erfordert wiederholte Anmeldungen. Lösen Sie das Problem der Handhabung der Entwicklungsumgebung: Das Springboot-Projekt verfügt über integriertes Tomcat, sodass der in application.yaml im Projekt konfigurierte Sitzungsausgang wirksam ist. Produktionsumgebung: Die Produktionsumgebung ist freigegeben

So beheben Sie Sitzungsfehler So beheben Sie Sitzungsfehler Oct 18, 2023 pm 05:19 PM

Ein Sitzungsfehler wird normalerweise durch den Ablauf der Sitzungslebensdauer oder das Herunterfahren des Servers verursacht. Die Lösungen: 1. Verlängern Sie die Lebensdauer der Sitzung. 3. Verwenden Sie Cookies. 4. Aktualisieren Sie die Sitzung.

Lösung für das domänenübergreifende Problem der PHP-Sitzung Lösung für das domänenübergreifende Problem der PHP-Sitzung Oct 12, 2023 pm 03:00 PM

Lösung des domänenübergreifenden Problems von PHPSession Bei der Entwicklung der Front-End- und Back-End-Trennung sind domänenübergreifende Anforderungen zur Norm geworden. Wenn es um domänenübergreifende Probleme geht, nutzen wir in der Regel Sitzungen und verwalten diese. Aufgrund von Richtlinieneinschränkungen für den Browserursprung können Sitzungen jedoch standardmäßig nicht über Domänen hinweg gemeinsam genutzt werden. Um dieses Problem zu lösen, müssen wir einige Techniken und Methoden verwenden, um eine domänenübergreifende gemeinsame Nutzung von Sitzungen zu erreichen. 1. Die häufigste Verwendung von Cookies zum domänenübergreifenden Teilen von Sitzungen

Was soll ich tun, wenn die PHP-Sitzung nach der Aktualisierung verschwindet? Was soll ich tun, wenn die PHP-Sitzung nach der Aktualisierung verschwindet? Jan 18, 2023 pm 01:39 PM

Lösung für das Problem, dass die PHP-Sitzung nach der Aktualisierung verschwindet: 1. Öffnen Sie die Sitzung über „session_start();“ 2. Schreiben Sie alle öffentlichen Konfigurationen in eine PHP-Datei 3. Der Variablenname darf nicht mit dem Array-Index identisch sein; 4. Überprüfen Sie einfach den Speicherpfad der Sitzungsdaten in phpinfo und prüfen Sie, ob die Sitzung im Dateiverzeichnis erfolgreich gespeichert wurde.

Was ist die Standardablaufzeit von Session PHP? Was ist die Standardablaufzeit von Session PHP? Nov 01, 2022 am 09:14 AM

Die Standardablaufzeit der Sitzungs-PHP beträgt 1440 Sekunden, also 24 Minuten. Das heißt, wenn der Client länger als 24 Minuten nicht aktualisiert wird, läuft die aktuelle Sitzung ab, wenn der Benutzer den Browser schließt Die Sitzung wird nicht mehr existieren.

So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist So lösen Sie das Problem, dass die Timeout-Einstellung für die Springboot2-Sitzung ungültig ist May 22, 2023 pm 01:49 PM

Problem: Heute ist in unserem Projekt ein Zeitüberschreitungsproblem aufgetreten, und Änderungen an den application.properties von SpringBoot2 wurden nie wirksam. Lösung: Die server.*-Eigenschaften werden verwendet, um den eingebetteten Container zu steuern, der von SpringBoot verwendet wird. SpringBoot erstellt eine Instanz des Servlet-Containers mithilfe einer der ServletWebServerFactory-Instanzen. Diese Klassen verwenden server.*-Eigenschaften, um den kontrollierten Servlet-Container (Tomcat, Jetty usw.) zu konfigurieren. Wenn die Anwendung als WAR-Datei auf einer Tomcat-Instanz bereitgestellt wird, gelten die server.*-Eigenschaften nicht. Sie gelten nicht,

So implementieren Sie die SMS-Anmeldung in der Redis-Anwendung für gemeinsam genutzte Sitzungen So implementieren Sie die SMS-Anmeldung in der Redis-Anwendung für gemeinsam genutzte Sitzungen Jun 03, 2023 pm 03:11 PM

1. Implementieren der SMS-Anmeldung basierend auf der Sitzung 1.1 Ablaufdiagramm der SMS-Anmeldung 1.2 Implementieren des Sendens eines SMS-Bestätigungscodes Beschreibung der Front-End-Anfrage: Beschreibung der Anfragemethode POST-Anfragepfad/Benutzer/Code-Anfrageparameter Telefon (Telefonnummer) Rückgabewert Keine Back-End-Schnittstelle Implementierung: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){//1 Überprüfen Sie die Mobiltelefonnummer, wenn

Was sind die Unterschiede zwischen JavaScript- und PHP-Cookies? Was sind die Unterschiede zwischen JavaScript- und PHP-Cookies? Sep 02, 2023 pm 12:29 PM

JavaScript-Cookies Die Verwendung von JavaScript-Cookies ist die effektivste Möglichkeit, Präferenzen, Käufe, Provisionen und andere Informationen zu speichern und zu verfolgen. Informationen, die für ein besseres Besuchererlebnis oder Website-Statistiken benötigt werden. PHPCookieCookies sind Textdateien, die auf Client-Computern gespeichert und zu Nachverfolgungszwecken aufbewahrt werden. PHP unterstützt transparent HTTP-Cookies. Wie funktionieren JavaScript-Cookies? Ihr Server sendet einige Daten in Form eines Cookies an den Browser Ihres Besuchers. Browser können Cookies akzeptieren. Falls vorhanden, wird es als reiner Textdatensatz auf der Festplatte des Besuchers gespeichert. Wenn ein Besucher nun eine andere Seite der Website erreicht

See all articles