Ich hab mich letztens mal etwas intensiver mit SESSION beschäftigt. Dabei hab ich ein Buch zur Hand genommen, welches mir folgenden Vorschlag machte: Sessiondaten selber speichern.
In dem Buch ist folgender Script dargelegt:
PHP
<?php
function ms_open($sesspath, $sessname)
{
global $DB; // Datenbankhandle
$time = time();
$sessid = session_id();
$query = "SELECT * FROM currentsession
WHERE sessionID = '$sessid'";
$RS = mysql_query($query, $DB);
if (mysql_num_rows($RS) == 0) {
$query = "INSERT INTO currentsession
(sessionID, laccess)
VALUES ('$sessid', '$time')";
} else {
$query = "UPDATE currentsession
SET laccess = '$time'
WHERE sessionID = '$sessid'";
}
$RS = mysql_query($query, $DB);
return $RS;
}
function ms_read($sessid) {
global $DB;
$query = "SELECT * FROM currentsession
WHERE sessionID='$sessid'";
$RS = mysql_query($query, $DB);
$arrRS = mysql_fetch_assoc($RS);
if (is_array($arrRS)) {
return $arrRS[$variables];
} else {
return FALSE;
}
}
function ms_write($sessid, $varis) {
global $DB;
$query = "UPDATE currentsession
SET variables = '$varis'
WHERE sessionID = '$sessid'";
$RS = mysql_query($query, $DB);
return $blnRS;
}
function ms_destroy($sessid) {
global $DB;
$query = "DELETE FROM currentsession
WHERE sessionID = '$sessid'";
$RS = mysql_query($query, $DB);
return $RS;
}
function ms_gc($sesslt) {
global $DB;
$tStamp = time() - $sesslt;
$query = "DELETE FROM currentsession
WHERE laccess < '$tStamp'";
$intRS = mysql_query($query, $DB);
return $intRS;
}
function ms_close() {
}
session_module_name("user");
session_set_save_handler('ms_open', 'ms_close',
'ms_read', 'ms_write',
'ms_destroy', 'ms_gc');
session_name('SESSION');
// Erzeugen Sie folgende Tabelle in der Datenbank:
/*
CREATE TABLE currentsession (
sessionID varchar(32) NOT NULL,
usrID bigint(20) NOT NULL,
variables text NOT NULL,
laccess int(14),
PRIMARY KEY (sessionID),
KEY usrID (usrID)
);
*/
// Ändern Sie hier die Parameter für die Datenbank
$DB = mysql_connect('localhost', 'root', '');
mysql_select_db('mysessiondb', $DB);
session_start();
?>
<html>
<title>Session</title>
<link rel="stylesheet" type="text/css" href="my.css">
<body>
<?php
$sessid = session_id();
echo "Aktuelle Session-ID: $sessid";
?>
</body>
</html>
Alles anzeigen
Dazu habe ich jetzt n paar fragen:
- zum speichern von session sollte man session_register() verwenden. alles ok, aber wie les ich sie wieder aus?
- wie lösche ich die aktuelle session wieder?
- beim speichern in die datenbank wird bei einer neuen sitzung (erster aufruf) nur die Spalte laccess mit einem timestamp gefüllt. wieso? beim 2ten aufruf schreibt er dann tatsächlich eine neue reihe mit der sessionid und lacess. ERST beim dritten aufruf werden zusätzliche daten gespeichert. irgendwie komisch
naja..
Gruß Heinrich S.