suchen
HeimBackend-EntwicklungPHP-TutorialPHP-Datenbanksitzungssitzung speichern

PHP-Datenbanksitzungssitzung speichern

Apr 03, 2018 am 11:10 AM
phpsession数据库

Dieser Artikel stellt das Speichern von Sitzungen in einer PHP-Datenbank vor und kann auch als Referenz für Freunde in Not dienen.


Vorwort:


Standardmäßig speichert PHP alle Sitzungsdaten in Textdateien auf dem Server. Diese Dateien werden normalerweise im temporären Verzeichnis gespeichert.

Warum müssen wir dann die Sitzung in der Datenbank speichern?

  1. Der Hauptgrund: die Sicherheit des Systems zu verbessern. Auf einem gemeinsam genutzten Server verwenden alle Websites ohne besondere Einstellungen dasselbe temporäre Verzeichnis, was bedeutet, dass Dutzende Programme Dateien am selben Ort lesen und schreiben. Es wurde nicht nur die Geschwindigkeit verringert, sondern es war auch möglich, dass jemand anderes die Benutzerdaten meiner Website stehlen konnte.

  2. Das Speichern von Sitzungsdaten in der Datenbank kann auch die Suche nach weiteren Informationen zu Website-Sitzungen erleichtern. Wir können die Anzahl der aktiven Sitzungen (die Anzahl der Benutzer, die gleichzeitig online sind) abfragen Zeit) und auch Sitzungsdaten werden gesichert.

  3. Wenn meine Website gleichzeitig auf mehreren Servern läuft, kann ein Benutzer während einer Sitzung mehrere Anfragen an verschiedene Server senden, wenn die Sitzungsdaten jedoch auf einem bestimmten Server gespeichert werden Andere Server können diese Sitzungsdaten nicht nutzen. Wenn einer meiner Server nur die Rolle einer Datenbank übernimmt, wäre es für Sie dann nicht sehr praktisch, alle Sitzungsdaten in der Datenbank zu speichern?

Weitere Informationen zu PHP-Sitzungen finden Sie in diesem Blog. Erfahren Sie mehr über den SESSION-Mechanismus von PHP

1. Erstellen Sie eine Sitzungstabelle

Da die Sitzungsdaten auf dem Server und ein Index (Sitzungs-ID) auf dem Client gespeichert werden, entspricht dieser Index einem bestimmten Teil der Sitzungsdaten auf dem Server. Daher müssen die beiden Felder „id“ und „data“ in der Tabelle enthalten sein, und die Sitzung hat eine Ablaufzeit. Daher gibt es hier ein weiteres Feld mit dem Namen „last_accessed“. Hier habe ich die Tabelle unter der Testdatenbank erstellt:

CREATE TABLE sessions(
    id CHAR(32) NOT NULL,
    data TEXT,
    last_accessed TIMESTAMP NOT NULL,    PRIMARY KEY(id)
);

PHP-Datenbanksitzungssitzung speichern

PS: Wenn das Programm eine große Datenmenge in der Sitzung speichern muss, muss das Datenfeld möglicherweise als MEDIUMTEXT- oder LONGTEXT-Typ definiert werden.

2、定义会话函数:

这里我们主要有两个步骤:

  1. 定义与数据库交互的函数

  2. 使PHP能使用这些自定义函数

在第二步中,是通过调用函数 session_set_save_handler()来完成的,调用它需要6个参数,分别是 open(启动会话)、close(关闭会话)、read(读取会话)、write(写入会话)、destroy(销毁会话)、clean(垃圾回收)。

我们新建php文件 sessions.inc.php ,代码如下:

<?php$sdbc = null;  //数据库连接句柄,在后面的函数里面让它成为全局变量//启动会话function open_session(){
    global $sdbc;      //使用全局的$sdbc
    $sdbc = mysqli_connect(&#39;localhost&#39;, &#39;root&#39;, &#39;lsgogroup&#39;, &#39;test&#39;);     //数据库 test
    if (!$sdbc) {        return false;
    }    return true;
}//关闭会话function close_session(){
    global $sdbc;    return mysqli_close($sdbc);
}//读取会话数据function read_session($sid){
    global $sdbc;    $sql = sprintf("SELECT data FROM sessions WHERE id=&#39;%s&#39;", mysqli_real_escape_string($sdbc, $sid));    $res = mysqli_query($sdbc, $sql);    if (mysqli_num_rows($res) == 1) {        list($data) = mysqli_fetch_array($res, MYSQLI_NUM);        return $data;
    } else {        return &#39;&#39;;
    }
}//写入会话数据function write_session($sid, $data){
    global $sdbc;    $sql = sprintf("INSERT INTO sessions(id,data,last_accessed) VALUES(&#39;%s&#39;,&#39;%s&#39;,&#39;%s&#39;)", mysqli_real_escape_string($sdbc, $sid), mysqli_real_escape_string($sdbc, $data), date("Y-m-d H:i:s", time()));    $res = mysqli_query($sdbc, $sql);    if (!$res) {        return false;
    }    return true;
}//销毁会话数据function destroy_session($sid){
    global $sdbc;    $sql = sprintf("DELETE FROM sessions WHERE id=&#39;%s&#39;", mysqli_real_escape_string($sdbc, $sid));    $res = mysqli_query($sdbc, $sql);    $_SESSION = array();    if (!mysqli_affected_rows($sdbc) == 0) {        return false;
    }    return true;
}//执行垃圾回收(删除旧的会话数据)function clean_session($expire){
    global $sdbc;    $sql = sprintf("DELETE FROM sessions WHERE DATE_ADD(last_accessed,INTERVAL %d SECOND)<NOW()", (int)$expire);    $res = mysqli_query($sdbc, $sql);    if (!$res) {        return false;
    }    return true;
}//告诉PHP使用会话处理函数session_set_save_handler(&#39;open_session&#39;, &#39;close_session&#39;, &#39;read_session&#39;, &#39;write_session&#39;, &#39;destroy_session&#39;, &#39;clean_session&#39;);//启动会话,该函数必须在session_set_save_handler()函数后调用,不然我们所定义的函数就没法起作用了。session_start();//由于该文件被包含在需要使用会话的php文件里面,因此不会为其添加PHP结束标签

PS:

  1. 处理“读取”函数外,其他函数必须返回一个布尔值,“读取”函数必须返回一个字符串。

  2. .每次会话启动时,“打开”和“读取”函数将会立即被调用。当“读取”函数被调用的时候,可能会发生垃圾回收过程。

  3. 当脚本结束时,“写入”函数就会被调用,然后就是“关闭”函数,除非会话被销毁了,而这种情况下,“写入”函数不会被调用。但是,在“关闭”函数之后,“销毁”函数将会被调用。

  4. .session_set_save_handler()函数参数顺序不能更改,因为它们一一对应 open 、close、read、、、、

  5. 会话数据最后将会以数据序列化的方式保存在数据库中。

3、使用新会话处理程序

使用新会话处理程序只是调用session_set_save_handler()函数,使我们的自定义函数能够被自动调用而已。其他关于会话的操作都没有发生变化(以前怎么用现在怎么用,我们的函数会在后台自动被调用),包括在会话中存储数据,访问保存的会话数据以及销毁数据。

在这里,我们新建 sessions.php 文件,该脚本将在没有会话信息时创建一些会话数据,并显示所有的会话数据,在用户点击 ‘log out’(注销)时销毁会话数据。

代码:

<?php//引入sessions.inc.php文件,即上面的代码require(&#39;sessions.inc.php&#39;);?><!doctype html><html lang=&#39;en&#39;><head>
    <meta charset="utf-8">
    <title>DB session test</title></head><body><?php//创建会话数据if(empty($_SESSION)){    $_SESSION[&#39;blah&#39;] = "umlaut";    $_SESSION[&#39;this&#39;] = 12345;    $_SESSION[&#39;that&#39;] = &#39;blue&#39;;    echo "<p>Session data stored</p>";
}else{    echo "<p>Session data exists:<pre class="brush:php;toolbar:false">".print_r($_SESSION,1)."
"; }if(isset($_GET['logout'])){    //销毁会话数据     session_destroy();    echo "

session destroyed

"; }else{    echo "log out"; }echo "

session data :

".print_r($_SESSION,1)."
";echo '

Das obige ist der detaillierte Inhalt vonPHP-Datenbanksitzungssitzung speichern. 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
PHP und Python: Verschiedene Paradigmen erklärtPHP und Python: Verschiedene Paradigmen erklärtApr 18, 2025 am 12:26 AM

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP und Python: Ein tiefes Eintauchen in ihre GeschichtePHP und Python: Ein tiefes Eintauchen in ihre GeschichteApr 18, 2025 am 12:25 AM

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

Wählen Sie zwischen PHP und Python: Ein LeitfadenWählen Sie zwischen PHP und Python: Ein LeitfadenApr 18, 2025 am 12:24 AM

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP und Frameworks: Modernisierung der SprachePHP und Frameworks: Modernisierung der SpracheApr 18, 2025 am 12:14 AM

PHP bleibt im Modernisierungsprozess wichtig, da es eine große Anzahl von Websites und Anwendungen unterstützt und sich den Entwicklungsbedürfnissen durch Frameworks anpasst. 1.PHP7 verbessert die Leistung und führt neue Funktionen ein. 2. Moderne Frameworks wie Laravel, Symfony und Codesigniter vereinfachen die Entwicklung und verbessern die Codequalität. 3.. Leistungsoptimierung und Best Practices verbessern die Anwendungseffizienz weiter.

Auswirkungen von PHP: Webentwicklung und darüber hinausAuswirkungen von PHP: Webentwicklung und darüber hinausApr 18, 2025 am 12:10 AM

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Wie funktioniert der Php -Typ -Hinweis, einschließlich Skalartypen, Rückgabetypen, Gewerkschaftstypen und nullbaren Typen?Apr 17, 2025 am 12:25 AM

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Wie handelt es sich bei PHP -Objektklonen (Klonschlüsselwort) und der __clone Magic -Methode?Apr 17, 2025 am 12:24 AM

Verwenden Sie in PHP das Klonschlüsselwort, um eine Kopie des Objekts zu erstellen und das Klonierungsverhalten über die \ _ \ _ Clone Magic -Methode anzupassen. 1. Verwenden Sie das Klonschlüsselwort, um eine flache Kopie zu erstellen und die Eigenschaften des Objekts, nicht die Eigenschaften des Objekts zu klonen. 2. Die \ _ \ _ Klonmethode kann verschachtelte Objekte tief kopieren, um flache Kopierprobleme zu vermeiden. 3. achten Sie darauf, dass kreisförmige Referenzen und Leistungsprobleme beim Klonen vermieden werden, und optimieren Sie die Klonierungsvorgänge, um die Effizienz zu verbessern.

PHP vs. Python: Anwendungsfälle und AnwendungenPHP vs. Python: Anwendungsfälle und AnwendungenApr 17, 2025 am 12:23 AM

PHP eignet sich für Webentwicklungs- und Content -Management -Systeme, und Python eignet sich für Datenwissenschafts-, maschinelles Lernen- und Automatisierungsskripte. 1.PHP hat eine gute Leistung beim Erstellen von schnellen und skalierbaren Websites und Anwendungen und wird üblicherweise in CMS wie WordPress verwendet. 2. Python hat sich in den Bereichen Datenwissenschaft und maschinelles Lernen mit reichen Bibliotheken wie Numpy und TensorFlow übertrifft.

See all articles

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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.