Database Sessie Handler
Ik zag in de wishlist het volgende staan: - Een eigen sessie handler (database/file based backend) (zowel script als tutorial) Toen ik dit zag dacht ik hé ik gebruik er een. Dus ik dacht laat ik het maar eens toevoegen. Het script zorgt voor een veiliger session save path, namelijk de database. Waarom is het veiliger, omdat bij publieke servers de session path meestal wordt gedeeld. Hierdoor krijgen andere mensen gewoon de kans je sessie te grijpen, niet goed dus. Hiervoor zorgt het volgende script een block voor, maar een nadeel je wachtwoord van database etc. Dit kun je echt ook blokkeren, door namelijk in de apache config wat laten toevoegen. Je moet namelijk het volgende moeten toevoegen. Hierdoor komt het in de SERVER array :), alleen wees dan voorzichtig met je phpinfo() :D SetEnv DB_USER "user" SetEnv DB_PASS "pass" Vraag hiervoor je hosts als je het zelf niet kan, ze kunnen het makkelijk toevoegen in je virtualhost bestand en anders probeer htaccess en zorg ervoor dat alleen apache dan mag lezen. Hoe je dat moet doen zoek maar uit :P Het is goed getest, geen enkele fout ben ik zeker van.
Oops, vergat de mysql data :P:P
MYSQL DATA:
CREATE TABLE sessions
(
id varchar(32) NOT NULL
access int(10) unsigned,
data blob,
PRIMARY KEY (id)
);
<?php
//Benoem dit bestand session_start.php, nu in plaats van session_start() te gebruiken.
//Gebruik je dit bestand dus:
//require_once 'session_start.php';
//Het zal dus meteen werken.
session_set_save_handler('_open',
'_close',
'_read',
'_write',
'_destroy',
'_clean');
function _open()
{
global $_sess_db;
$db_user = $_SERVER['DB_USER'];
$db_pass = $_SERVER['DB_PASS'];
$db_host = 'host';
$db_sel = 'database';
if ($_sess_db = mysql_connect($db_host, $db_user, $db_pass))
{
return mysql_select_db($db_sel, $_sess_db);
}
return FALSE;
}
function _close()
{
global $_sess_db;
return mysql_close($_sess_db);
}
function _read($id)
{
global $_sess_db;
$id = mysql_real_escape_string($id);
$sql = "SELECT data
FROM sessions
WHERE id = '$id'";
if ($result = mysql_query($sql, $_sess_db))
{
if (mysql_num_rows($result))
{
$record = mysql_fetch_assoc($result);
return $record['data'];
}
}
return '';
}
function _write($id, $data)
{
global $_sess_db;
$access = time();
$id = mysql_real_escape_string($id);
$access = mysql_real_escape_string($access);
$data = mysql_real_escape_string($data);
$sql = "REPLACE
INTO sessions
VALUES ('$id', '$access', '$data')";
return mysql_query($sql, $_sess_db);
}
function _destroy($id)
{
global $_sess_db;
$id = mysql_real_escape_string($id);
$sql = "DELETE
FROM sessions
WHERE id = '$id'";
return mysql_query($sql, $_sess_db);
}
function _clean($max)
{
global $_sess_db;
$old = time() - $max;
$old = mysql_real_escape_string($old);
$sql = "DELETE
FROM sessions
WHERE access < '$old'";
return mysql_query($sql, $_sess_db);
}
session_start();
?>
Reacties
0