|
In der Datei z_sess_storageclass.php5
eine neue Klasse...
class Session_Storage_DbMapper extends BaseDbMapper {
public function __construct () {
parent::__construct();
session_set_save_handler (array (&$this,'z_open'),
array (&$this,'z_close'),
array (&$this,'z_read'),
array (&$this,'z_write'),
array (&$this,'z_destroy'),
array (&$this,'z_gc'));
return true;
}
public function z_open ($sesspath, $sessname){
return true;
}
public function z_close (){
return true;
}
public function z_read ($sessid){
$sql = "
SELECT
var_php
FROM
z_session
WHERE
sessionid = '$sessid'
";
$result = $this->base_query($sql);
if ($ret = $result->fetch_assoc()) {
$sql = "
UPDATE
z_session
SET
access_end = ".time()."
WHERE
sessionid = '$sessid'
";
$this->base_query($sql);
return $ret['var_php'];
} else {
return "";
}
}
public function z_write ($sessid, $var) {
$sql = "
INSERT INTO
z_session
(sessionid, var_php, access, variables)
VALUES
('$sessid','$var',".time(). ", '".serialize($_SERVER)."')
ON DUPLICATE KEY
UPDATE
var_php = '$var',
access_end = ".time()."
";
$this->base_query($sql);
return true;
}
public function z_destroy ($sessid){
$sql = "
SELECT
*
FROM
z_session
WHERE
sessionid = '$sessid'
";
$result = $this->base_query($sql);
if ($row = $result->fetch_assoc()) {
if ($row['access_end'] != '') {
$hit = new HitDbMapper();
$hit->insert_Hit('tag_'.date("z",$row['access']),
'counter_gesamt',date("Y",$row['access']));
}
$sql = "
UPDATE
z_session
SET
sessionid = NULL
WHERE
sessionid = '$sessid'
";
$this->base_query($sql);
}
return true;
}
public function z_gc ($sesslt){
$sql = "
LOCK TABLES z_session write
";
$this->base_query($sql);
$hit = new HitDbMapper();
$sql = "
SELECT
ord,
access
FROM
z_session
WHERE
!isnull(sessionid) &&
!isnull(access_end) &&
access_end < ". (time()-600)
;
if ($result = $this->base_real_query($sql)){
if ($res_store = $this->store_result()){
while ($row = $res_store->fetch_assoc()) {
$sql = "
UPDATE
z_session
SET
sessionid = NULL
WHERE
ord = ".$row['ord']
;
$this->base_query($sql);
$hit->insert_Hit('tag_'.date("z",$row['access']),
'counter_gesamt', date("Y",$row['access']));
}
$res_store->free_result();
}
}
$sql = "
DELETE FROM
z_session
WHERE
(isnull(access_end) && access < ".(time()-600).") ||
access < ".(time()-2592000)
;
$this->base_query($sql);
$sql = "
UNLOCK TABLES
";
$this->base_query($sql);
return true;
}
}
|
| |