So verwenden Sie Datenbankmethoden zum Speichern von Sitzungen

jacklove
Freigeben: 2023-03-30 16:42:02
Original
1335 Leute haben es durchsucht

Die PHP-Sitzung wird standardmäßig als Datei auf der Serverseite gespeichert und Cookies werden zum Speichern von Variablen auf der Clientseite verwendet. Dies führt zu einem Problem, wenn ein Benutzer das Cookie 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, über die wir hier sprechen, ist Linux(freesd)+Apache+MySQL+php.

Datentabellenstruktur: [Sitzungen]

CREATE TABLE sessions (
sesskey char(32) not null,
expiry int(11) unsigned not null,
value text not null,
PRIMARY KEY (sesskey)
);
Nach dem Login kopieren

Programmcode: [session_inc.php]

$SESS_DBHOST = "yourhost"; /* database server hostname */
$SESS_DBNAME = "yourdb"; /* database name */
$SESS_DBUSER = "youruser"; /* database user */
$SESS_DBPASS = "yourpassword"; /* database password */
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
Nach dem Login kopieren
function sess_open($save_path, $session_name) {
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;
Nach dem Login kopieren
if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {echo "
Can't connect to $SESS_DBHOST as $SESS_DBUSER";echo "
MySQL Error: " . mysql_error();die;}
Nach dem Login kopieren
if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {echo "
Unable to select database $SESS_DBNAME";die;}return true;}
Nach dem Login kopieren
function sess_close() {
return true;
}
function sess_read($key) {
global $SESS_DBH, $SESS_LIFE;
$qry = "SELECT value FROM session_tbl WHERE sesskey = '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);
Nach dem Login kopieren
if (list($value) = mysql_fetch_row($qid)) {
return $value;
}
return false;
}
Nach dem Login kopieren
function sess_write($key, $val) {
global $SESS_DBH, $SESS_LIFE;
$expiry = time() + $SESS_LIFE; //过期时间
$value = addslashes($val);
$qry = "INSERT INTO session_tbl VALUES ('$key', $expiry, '$value')";
$qid = mysql_query($qry, $SESS_DBH);
Nach dem Login kopieren
if (! $qid) {
$qry = "UPDATE session_tbl SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();
$qid = mysql_query($qry, $SESS_DBH);
}
return $qid;
}
function sess_destroy($key) {
global $SESS_DBH;
$qry = "DELETE FROM session_tbl WHERE sesskey = '$key'";
$qid = mysql_query($qry, $SESS_DBH);
return $qid;
}
Nach dem Login kopieren
function sess_gc($maxlifetime) {
global $SESS_DBH;
$qry = "DELETE FROM session_tbl WHERE expiry < " . time();
$qid = mysql_query($qry, $SESS_DBH);
return mysql_affected_rows($SESS_DBH);
}
Nach dem Login kopieren
session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");
Nach dem Login kopieren
session_start();
?>
Nach dem Login kopieren

Nach Abschluss der oben genannten Schritte verwenden Sie es drin Das Programm erfordert lediglich „session_inc.php“) anstelle von session_start(), und andere Sitzungsfunktionen werden weiterhin auf die gleiche Weise wie zuvor aufgerufen.

In diesem Artikel wird beschrieben, wie Sie Sitzungen über die Datenbank speichern. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.

Verwandte Empfehlungen:

Fünf Möglichkeiten, SQL-Injection zu verhindern

Über MySQL-Hochverfügbarkeit: Keepalived Dual Master Hot Backup

Verwenden Sie PHP, um mehrere gängige Sortieralgorithmusprogramme zu schreiben

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Datenbankmethoden zum Speichern von Sitzungen. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!