Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn PHP die Sitzung nicht bestehen kann?

Was soll ich tun, wenn PHP die Sitzung nicht bestehen kann?

藏色散人
藏色散人Original
2021-10-15 09:17:002031Durchsuche

Lösung für PHP, das keine Sitzung übertragen kann: 1. Cookies im Client aktivieren. 2. Browserprobleme überprüfen und auf Cookies zugreifen. 3. Session.use_trans_sid in php.ini aktivieren.

Was soll ich tun, wenn PHP die Sitzung nicht bestehen kann?

Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer

Lösung für das Problem, dass SESSION in PHP nicht seitenübergreifend weitergegeben werden kann

Freunde, die haben verwendete SESSION in PHP Möglicherweise tritt ein solches Problem auf: Die SESSION-Variable kann nicht seitenübergreifend übergeben werden. Das beschäftigte mich mehrere Tage lang, und schließlich dachte ich darüber nach und löste dieses Problem, indem ich nach Informationen suchte. Ich denke, die Gründe für dieses Problem sind folgende:
1. Cookies sind auf dem Client deaktiviert
2 Es liegt ein Problem mit dem Browser vor und es ist vorübergehend kein Zugriff auf Cookies möglich
3 oder beim Kompilieren ist die Option --enable-trans-sid nicht aktiviert

Warum passiert das? Lassen Sie es mich unten erklären:

Die Sitzung wird auf der Serverseite gespeichert (die Sitzung wird standardmäßig als Datei gespeichert, die Datei des Benutzers wird abgerufen und der Wert der Variablen wird abgerufen). Die Sitzungs-ID kann das Cookie des Clients oder Http1.1 verwenden. Der Query_String des Protokolls (der Teil nach dem „?“ der aufgerufenen URL) wird an den Server gesendet, und dann liest der Server das Sitzungsverzeichnis. Mit anderen Worten: Die Sitzungs-ID ist die ID-Karte zum Abrufen der im Dienst gespeicherten Sitzungsvariablen. Wenn der Code session_start(); ausgeführt wird, wird eine Sitzungsdatei auf dem Server generiert, und die Sitzungsvariable wird so definiert, dass sie in der gerade generierten Sitzungsdatei in einer bestimmten Form gespeichert wird. Über die Sitzungs-ID können die definierten Variablen abgerufen werden. Nach dem Überqueren der Seite müssen Sie session_start() erneut ausführen. Die entsprechende Sitzungs-ID wird entsprechend generiert. Mit dieser Sitzungs-ID können Sie die erste erwähnte Sitzungsdatei nicht abrufen früher eingefügt, da diese Sitzungs-ID nicht der „Schlüssel“ zum Öffnen ist. Wenn Sie den Code session_id($session id); vor session_start(); hinzufügen, wird keine neue Sitzungsdatei generiert und die dieser ID entsprechende Sitzungsdatei wird direkt gelesen.
Die Sitzung in PHP verwendet standardmäßig das Cookie des Clients, um die Sitzungs-ID zu speichern. Wenn also ein Problem mit dem Cookie des Clients auftritt, wirkt sich dies auf die Sitzung aus. Es muss beachtet werden, dass die Sitzung nicht unbedingt auf Cookies angewiesen ist, was auch die Genialität der Sitzung im Vergleich zu Cookies darstellt. Wenn die Cookies des Clients deaktiviert sind oder ein Problem auftritt, hängt PHP die Sitzungs-ID automatisch an die URL an, sodass die Sitzungsvariable über die Sitzungs-ID seitenübergreifend verwendet werden kann. Dieser Anhang hat aber auch bestimmte Bedingungen, nämlich „session.use_trans_sid = 1 in php.ini oder die Option --enable-trans-sid ist während der Kompilierung aktiviert“.

Nachdem wir die oben genannten Prinzipien verstanden haben, lassen Sie uns Cookies beiseite legen und Sitzungen verwenden. Es gibt drei Hauptmethoden:

1. Setzen Sie session.use_trans_sid = 1 in php.ini oder aktivieren Sie die Option --enable-trans-sid Damit PHP die Sitzungs-ID automatisch seitenübergreifend weitergibt.
2. Übergeben Sie den Wert manuell über die URL und die Sitzungs-ID über das versteckte Formular.
3. Speichern Sie session_id in einer Datei, Datenbank usw. und rufen Sie sie während des seitenübergreifenden Prozesses manuell auf.

Lassen Sie uns das anhand eines Beispiels veranschaulichen:

s1.phps2.php

5ca33f6862f260ccdedafe2146b4e504Nächste Seite5db79b134e9f6b82c0b36e0489ee08ed " ;
Echo ​ $url ;                                      ?>

309fa725664d298d2d1424d65f766f56

Führen Sie den obigen Code aus. Wenn das Client-Cookie normal ist, sollten Sie das Ergebnis „Volksrepublik China“ erhalten.
Wenn Sie nun das Cookie auf dem Client manuell schließen und erneut ausführen, erhalten Sie möglicherweise kein Ergebnis. Wenn Sie das Ergebnis nicht erhalten können, setzen Sie „session.use_trans_sid = 1 in php.ini oder aktivieren Sie beim Kompilieren die Option --enable-trans-sid“ und Sie erhalten das Ergebnis „Volksrepublik China“


Dies ist die obige Art, 1 zu sagen.

Lassen Sie uns unten über Ansatz 2 sprechen:

Der geänderte Code lautet wie folgt:

s1.php


471b35ff96757914dd13fa1b0e9492dcNächste Seite5db79b134e9f6b82c0b36e0489ee08ed " ;
Echo ​ $url ;                                         ?>


s2.php Methode 3: login.html

2c4c244de5ed42630b3f1039499f5943  

 

3b2729eccbdc1a8f4234581bb2088b9a        
  41a5f5b1b33237b4b957543f2d56b8226a645b1da76266ab6704e4b0039f9477               

    e43a299e53362b2e07e63ca6e188dd2b   Login   e4bf1e768cf847e0602f318707869ec4                                                   
  cf6ac650b05599a9ad2cee6cb41c669c  
  4fe11b896a6227e05884e2acd2993d09                                                                
  86a52fcf656fccfcef68162754720b4c    请登录:                                                
  1cb926065c73371b1c8031ed5a590d9f                                                 
用户名   :5d74cc4a5141c9bbbda6329a11fba6702cd52db9b797f2c7ecc9db34e8bbc4a4                              
口 令   :62c65dda2537e752a6f5215085ca54de2cd52db9b797f2c7ecc9db34e8bbc4a4                          
  b2db3651b2ecc8af79c9d854c6f500ca                                      
  786c687bc915e6597ed836be1852f215                                                                
  a986419e1d24176099b6f99c9c0b7c2a                                                                
  4a638ae04d15c042ea58e396894920d5      

 

mylogin1.php

<?   php

   $name   =   $_POST   [   &#39;   name   &#39;   ];
   $pass   =   $_POST   [   &#39;   pass   &#39;   ];
   if   (   !   $name       ||       !   $pass   ) {
   echo       "   用户名或密码为空,请<a href="login.html">重新登录</a>   "   ;
   die   ();
}
   if    (   !   (   $name   ==   "   laogong   "       &&       $pass   ==   "   123   "   )) {
   echo       "   用户名或密码不正确,请<a href="login.html">重新登录</a>   "   ;
   die   ();
}
   //   注册用户  
   ob_start   ();
   session_start   ();
   $_SESSION   [   &#39;   user   &#39;   ]   =       $name   ;
   $psid   =   session_id   ();
   $fp   =   fopen   (   "   e:/tmp/phpsid.txt   "   ,   "   w+   "   );
   fwrite   (   $fp   ,   $psid   );
   fclose   (   $fp   );
   //   身份验证成功,进行相关操作  
   echo       "   已登录<br>   "   ;
   echo       "   <a href="mylogin2.php">下一页</a>   "   ;

   ?>

mylogin2.php

2918cc39dafbdc12d35f414100536d7dmelden Sie sich an5db79b134e9f6b82c0b36e0489ee08ed " ;
Sterben ();
}

?>

Bitte deaktivieren Sie auch den Cookie-Test, Benutzername: laogong, Passwort: 123. Hiermit wird die Sitzungs-ID in einer Datei gespeichert. Die Datei lautet: e:/tmp/phpsid.txt. Bitte legen Sie den Dateinamen oder Pfad entsprechend Ihren Anforderungen fest System.

Was die Datenbankmethode betrifft, werde ich kein Beispiel nennen, sie ähnelt der Dateimethode.

Zusammenfassend haben die oben genannten Methoden eines gemeinsam: Sie müssen die Sitzungs-ID auf der vorherigen Seite abrufen und dann einen Weg finden, sie an die nächste Seite weiterzugeben. Fügen Sie vor dem Code session_id (übergebene Sitzungs-ID) hinzu session_start(); Code auf der nächsten Seite );

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHP die Sitzung nicht bestehen kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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