Sooo... nun habe ich es hinbekommen die session in die db zu schreiben, aber es klappt nicht, so wie ich es mir gedacht habe. Er schreibt immer wieder eine gleiche session in die db. wie bekomme ich es hin, dass es nur pro user eine session gibt?
Mein Code:
PHP-Code:
<?php
$mysqli = new mysqli ( $_config ['DB_HOST'], $_config ['DB_USER'], $_config ['DB_PASS'], $_config ['DB_DBNAME'] );
function sess_open($sess_path, $sess_name) {
return true;
}
function sess_close() {
return true;
}
function sess_read($sess_id) {
global $DBConnection;
if ($stmt = $DBConnection->prepare ( "SELECT
session_data
FROM
session_handler
WHERE
session_id = ?;" )) {
$stmt->bind_param ( "s", $sess_id );
$stmt->execute ();
$stmt->bind_result ( $ses_value );
if ($stmt->num_rows () === 0) {
$current_time = time ();
global $mysqli;
if($stmt_insert = $mysqli->prepare ( "INSERT INTO
session_handler (session_id, session_expires)
VALUES
(?, ?);" )){
/**
* Hier kann das session_expires noch hochgesetzt werden. Jetzt ist es
* nur das insert Datum.
*/
$stmt_insert->bind_param ( "si",$sess_id, $current_time );
$stmt_insert->execute ();
}
return true;
} else {
global $mysqli;
if ($stmt_update = $mysqli->prepare ( "UPDATE
session_handler
SET
session_expires = ?
WHERE
session_id = ?;" )) {
$stmt_update->bind_param ( "is", $current_time, $sess_id );
$stmt_update->execute ();
}
return $ses_value;
}
}
return '';
}
function sess_write($sess_id, $data) {
global $_config;
$mysqli = new mysqli ( $_config ['DB_HOST'], $_config ['DB_USER'], $_config ['DB_PASS'], $_config ['DB_DBNAME'] );
$current_time = time ();
if ($stmt_update_second = $mysqli->prepare ( "UPDATE
session_handler
SET
session_data = ?,
session_expires = ?
WHERE
session_id = ?;" )) {
$stmt_update_second->bind_param ( "sis", $data, $current_time, $sess_id );
$stmt_update_second->execute ();
}
return true;
}
function sess_destroy($sess_id) {
global $DBConnection;
if ($stmt_delete = $mysqli->prepare ( "DELETE
session_handler
WHERE
session_id = ?;" )) {
$stmt_delete->bind_param ( "s", $sess_id );
$stmt_delete->execute ();
}
return true;
}
function sess_gc($sess_maxlifetime) {
$current_time = time ();
if ($stmt_delete = $mysqli->prepare ( "DELETE
session_handler
WHERE
session_expires + $sess_maxlifetime < ?;" )) {
$stmt_delete->bind_param ( "i", $current_time );
$stmt_delete->execute ();
}
return true;
}
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
session_start();
$_SESSION['irgendwas'] = "bar";
$_SESSION['foo'] = "bar";
$_SESSION['baz'] = "wombat";
?>
Sieht vllt ein bisschen tricky aus, aber wird noch aufgeräumt
Hier die Datenbank ausgabe:
Vor allem werden immer zwei zeilen nach einem reload geschreiben
