Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Datenbankmethoden zum Speichern von Sitzungen

So verwenden Sie Datenbankmethoden zum Speichern von Sitzungen

jacklove
jackloveOriginal
2018-06-08 10:10:471376Durchsuche

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

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");
function 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 "
Can't connect to $SESS_DBHOST as $SESS_DBUSER";echo "
MySQL Error: " . mysql_error();die;}
if (! mysql_select_db($SESS_DBNAME, $SESS_DBH)) {echo "
Unable to select database $SESS_DBNAME";die;}return true;}
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);
if (list($value) = mysql_fetch_row($qid)) {
return $value;
}
return false;
}
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);
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;
}
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);
}
session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");
session_start();
?>

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!

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