drklord
Новичок
Проблема хранения сессий в БД
Написал для себя класс, позволяющий хранить сессии в базе данных, все работало отлично, однако после перехода на 5 версию PHP начались приколы. Сперва класс потерял доступ к внешнему классу мускла, который я подсовывал через global и мне пришлось дублировать весь класс во внутреннюю переменную ($this->mysql = $mysql
, после чего проблема решилась, но возникла другая в ф-и write: когда делается запись в базу, то поле value получается пустым, при проверке я выяснил что значение $val не пустое и запрос получается верным, я даже выполнял такой запрос через phpMyAdmin, там все сработало без проблем, уже все перепробовал, идеи кончились, может кто сталкивался?
Ниже привожу код класса, заранее благодарен за любые советы!
Написал для себя класс, позволяющий хранить сессии в базе данных, все работало отлично, однако после перехода на 5 версию PHP начались приколы. Сперва класс потерял доступ к внешнему классу мускла, который я подсовывал через global и мне пришлось дублировать весь класс во внутреннюю переменную ($this->mysql = $mysql

Ниже привожу код класса, заранее благодарен за любые советы!
PHP:
class sessions {
var $mysql;
var $lifetime;
var $table;
var $sid;
var $ip;
var $location;
var $modifed;
function sessions() {
global $cfg, $mysql;
$this->mysql = $mysql;
$this->table = "{$cfg['mysql']['pref']}sessions";
$this->lifetime = get_cfg_var('session.gc_maxlifetime');
$this->ip = isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'0.0.0.0';
$this->location = isset($_SERVER['REQUEST_URI'])?$_SERVER['REQUEST_URI']:'';
session_set_save_handler(
array(&$this, 'open'),
array(get_class($this), 'close'),
array(&$this, 'read'),
array(&$this, 'write'),
array(&$this, 'destroy'),
array(&$this, 'clear')
) or die("Failed to register session handler");
}
function open($save_path,$session_name) {
return true;
}
function close() {
return true;
}
function read($id) {
$id = mysql_real_escape_string($id);
$request = $this->mysql->query("SELECT uid,ip,location,value,modifed FROM $this->table WHERE uid = '$id' LIMIT 0,1");
if(mysql_num_rows($request)<1) return false;
$a = mysql_fetch_array($request,MYSQL_ASSOC);
$expTime = time() - $this->lifetime;
if($a['modifed'] < $expTime) {
$this->destroy($id);
return false;
}
$this->modifed = $a['modifed'];
return $a['value'];
}
function write($id,$val) {
$id = mysql_real_escape_string($id);
$val = mysql_real_escape_string($val);
$this->mysql->query("REPLACE INTO $this->table (uid,ip,location,value) "
."VALUES ('$id','$this->ip','$this->location','$val')");
return true;
}
function destroy($id) {
$id = mysql_real_escape_string($id);
return $this->mysql->query("DELETE FROM $this->table WHERE uid = '$id'");
}
function clear($lifetime) {
$etime = time() - $lifetime;
return $mysql->query("DELETE FROM $this->table WHERE modifed < $etime",true);
}
}