Heim >Backend-Entwicklung >PHP-Tutorial >So speichern Sie eine Sitzung in PHP mithilfe einer Datenbank

So speichern Sie eine Sitzung in PHP mithilfe einer Datenbank

WBOY
WBOYOriginal
2016-08-08 09:34:031057Durchsuche

Wir wissen, dass PHP-Sitzungen standardmäßig als Dateien gespeichert werden und Cookies zum Speichern von Variablen auf der Clientseite verwendet werden. Dies führt zu einem Problem, wenn ein Benutzer die Cookies des Browsers aus Sicherheitsgründen deaktiviert Sitzungsbezogene Vorgänge werden nicht ausgeführt. Wenn also Sitzungsdaten in der Datenbank gespeichert werden können, werden sie nicht durch Client-Einstellungen eingeschränkt und es kommt zu einem Leistungs- und Skalierbarkeitssprung. Die im Programm verwendete Schlüsselfunktion ist session_set_save_handler, und session.save_handler = Dateien in php.ini müssen in Benutzer geändert werden. Die Umgebung, die wir hier besprechen, ist Linux (FreeSD) Apache MySQL PHP.

Struktur der Datentabelle: [Sitzungen]
CREATE TABLE-Sitzungen (
sesskey char(32) nicht null,
expiry int(11) unsigned not null,
Werttext nicht null,
PRIMÄRSCHLÜSSEL (Sitzungsschlüssel)
);

Programmcode: [session_inc.php]
$SESS_DBHOST = "yourhost"; /* Datenbankserver-Hostname */
$SESS_DBNAME = "yourdb"; /* Datenbankname */
$SESS_DBUSER = "youruser"; /* Datenbankbenutzer */
$SESS_DBPASS = "yourpassWord"; /* Datenbankpasswort */

$SESS_DBH = ""; $SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
Funktion sess_open($save_path, $session_name) {
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;
If (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {
echo "

  • Kann keine Verbindung zu $SESS_DBHOST als $SESS_DBUSER herstellen"; echo "
  • MySQL-Fehler: " mysql_error();            sterben;
    }  

    If (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {
    echo „
  • Datenbank $SESS_DBNAME konnte nicht ausgewählt werden“;            sterben;
    }  

    Rückgabe wahr;
    }

    Funktion sess_close() {
    Rückgabe wahr;
    }

    Funktion sess_read($key) {
    Global $SESS_DBH, $SESS_LIFE;
    $qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry > " $qid = mysql_query($qry, $SESS_DBH);
    If (list($value) = mysql_fetch_row($qid)) {
               $value zurückgeben;
    }  

    Rückgabe falsch;
    }

    Funktion sess_write($key, $val) {
    Global $SESS_DBH, $SESS_LIFE;
    $expiry = time() $SESS_LIFE; //Ablaufzeit
    $value = addslashes($val);
    $qry = "INSERT INTO session_tbl VALUES ('$key', $expiry, '$value')"; $qid = mysql_query($qry, $SESS_DBH);
    If (! $qid) {
                $qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > "           $qid = mysql_query($qry, $SESS_DBH); }  

    Geben Sie $qid;
    zurück }

    Funktion sess_destroy($key) {
    global $SESS_DBH;

    $qry = "DELETE FROM session_tbl WHERE sesskey = '$key'"; $qid = mysql_query($qry, $SESS_DBH);
    Geben Sie $qid;
    zurück }

    Funktion sess_gc($maxlifetime) {
    global $SESS_DBH;

    $qry = „DELETE FROM session_tbl WHERE expiry <“ $qid = mysql_query($qry, $SESS_DBH);
    Rückgabe mysql_affected_rows($SESS_DBH);
    }

    session_set_save_handler(
    „sess_open“,
    „sess_close“,
    „sess_read“,
    „sess_write“,
    „sess_destroy“,
    "sess_gc");

    session_start();
    ?>
    Nachdem Sie die oben genannten Schritte ausgeführt haben, verwenden Sie im Programm require("session_inc.php") anstelle von session_start(). Andere Sitzungsfunktionen werden weiterhin auf die gleiche Weise wie zuvor aufgerufen.

    Das Obige stellt vor, wie PHP eine Datenbank zum Speichern von Sitzungen verwendet, einschließlich des Inhalts von Datenbankspeichersitzungen. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

  • 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