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

藏色散人
Freigeben: 2023-03-13 10:06:02
Original
2043 Leute haben es durchsucht

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

session_start ();                                  $_SESSION [ ' var1 ' ] = " Volksrepublik China " ; ;
$url = " Nächste Seite " ;
Echo ​ $url ;                                      ?>

session_start ();                                          Echo ​ " Der Wert der übergebenen Sitzungsvariablen var1 ist: " . $_SESSION [ ' var1 ' ];
?>

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


session_start ();                                         $_SESSION [ ' var1 ' ] = " Volksrepublik China " ;                             $sn ​ = ​ Sitzungs-ID ();                                        $url = " Nächste Seite " ;
Echo ​ $url ;                                         ?>


s2.php Methode 3: login.html

  Sitzungs-ID   (   $_GET   [   '   S   '   ]);                              
  session_start   ();                                     
  Echo       "   传递的session变量var1的值为:   "   .   $_SESSION   [   '   var1   '   ]; 
  ?>  

 

       
  <   html   ><   Kopf   >               

    <   Titel   >   Login                                                     
  <   Meta-http   -   Äquiv   =   "   Inhaltstyp   "    Inhalt   =   "   text/html; Zeichensatz=GB2312   "   >  
                                                                 
  <   Körper   >    请登录:                                                
  <   Formularname   =   "   Login   "    Verfahren   =   "   Post   "       

   Aktion   =   "   mylogin1.php   "   >                                                 
用户名   :<   Eingabetyp   =   "   Text   "    Name   =   "   Name   "   ><   br   >                              
口 令   :<   Eingabetyp   =   "   Passwort   "    Name   =   "   passieren   "   ><   br   >                          
  <   Eingabetyp   =   "   einreichen   "    Wert   =   "   登录   "   >                                      
                                                                 
                                                                 
       

 

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>   "   ;

   ?>
Nach dem Login kopieren

mylogin2.php

$fp = fopen ( " e:/tmp/phpsid.txt " , " R " );
$sid = Angst ( $fp , 1024 );
fclose ( $fp );
Sitzungs-ID ( $sid );
session_start ();
Wenn ( isset ( $_SESSION [ ' Benutzer ' ]) && ​ $_SESSION [ ' Benutzer ' ] = " laogong " ) {
Echo ​ " Bereits eingeloggt! " ;
}
anders {
// Melden Sie sich erfolgreich an, um entsprechende Vorgänge auszuführen
Echo ​ " Nicht angemeldet, keine Zugriffsrechte " ;
Echo ​ " Bittemelden Sie sich an " ;
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!

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