Browse Source
Storing session in database, #16
Storing session in database, #16
git-svn-id: svn+ssh://code.netmonsters.ru/svn/majestic/branches/evo@146 4cb57b5f-5bbd-dd11-951b-001d605cbbc5master
pzinovkin
15 years ago
3 changed files with 92 additions and 1 deletions
@ -0,0 +1,70 @@ |
|||
<?php |
|||
/** |
|||
* @copyright NetMonsters <team@netmonsters.ru> |
|||
* @link http://netmonsters.ru |
|||
* @package Majestic |
|||
* @subpackage Session |
|||
* @since 2010-02-28 |
|||
* @version SVN: $Id$ |
|||
* @filesource $URL$ |
|||
*/ |
|||
|
|||
class SessionModel extends Model |
|||
{ |
|||
|
|||
protected $life_time; |
|||
|
|||
public function __construct() |
|||
{ |
|||
parent::__construct(); |
|||
$this->life_time = get_cfg_var('session.gc_maxlifetime'); |
|||
} |
|||
|
|||
/* Session handler methods */ |
|||
|
|||
public function open($save_path, $sess_name) |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
public function close() |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
public function read($id) |
|||
{ |
|||
$sql = 'SELECT `data` FROM ' . $this->table() . ' WHERE `id`=? AND `expires` > UNIX_TIMESTAMP()'; |
|||
return (string) $this->fetchField($sql, $id, 'data'); |
|||
} |
|||
|
|||
public function write($id, $data) |
|||
{ |
|||
preg_match('/user\|.+s:2:"id";s:(\d+):"(\d+)"/', $data, $match); |
|||
$user_id = empty($match) ? 0 : (int) $match[2]; |
|||
|
|||
$sql = 'INSERT INTO ' . $this->table() . ' (`id`, `expires`, `user_id`, `data`)' |
|||
. ' VALUES(' . $this->quote($id) . ', UNIX_TIMESTAMP() + ' . (int) $this->life_time . ', ' . $user_id . ', ' . $this->quote($data) . ')' |
|||
. ' ON DUPLICATE KEY UPDATE `expires`=UNIX_TIMESTAMP() + ' . (int) $this->life_time . ', `user_id`=' . $user_id . ', `data`=' . $this->quote($data); |
|||
$affected = $this->db->query($sql)->affectedRows(); |
|||
return (bool) ($this->getInsertId()) ? $this->getInsertId() : $affected; |
|||
} |
|||
|
|||
public function destroy($id) |
|||
{ |
|||
return (bool) $this->db->delete($this->table(false), array('`id`=?' => (string) $id)); |
|||
} |
|||
|
|||
public function gc($max_life_time) |
|||
{ |
|||
return (bool) $this->db->delete($this->table(false), '`expires` < UNIX_TIMESTAMP()'); |
|||
} |
|||
|
|||
/* End of Session handler methods */ |
|||
|
|||
|
|||
public function destroyByUserId($user_id) |
|||
{ |
|||
return $this->db->delete($this->table(false), array('`user_id`=?' => $user_id)); |
|||
} |
|||
} |
@ -0,0 +1,10 @@ |
|||
|
|||
CREATE TABLE IF NOT EXISTS `session` ( |
|||
`id` char(32) NOT NULL, |
|||
`expires` int(11) unsigned NOT NULL, |
|||
`user_id` int(11) unsigned DEFAULT '0', |
|||
`data` text NOT NULL, |
|||
PRIMARY KEY (`id`), |
|||
KEY `expires` (`expires`), |
|||
KEY `user_id` (`user_id`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue