php session mysql_php session mysql存储

一直知道逻辑没实际用过,今天试用下!

session.gc_divisor 100

session.gc_maxlifetime 1440

session.gc_probability 1

以上三值很重要,session.gc_divisor决定了回收频率。测试时可以设置小点才有效果!

class Session

{

/**

* a database connection resource

* @var resource

*/

private static $_sess_db;

/**

* Open the session

* @return bool

*/

public static function open() {

if (self::$_sess_db = mysql_connect('localhost:3306',

'root',

'123456')) {

return mysql_select_db('sessions', self::$_sess_db);

}

return false;

}

/**

* Close the session

* @return bool

*/

public static function close() {

return mysql_close(self::$_sess_db);

}

/**

* Read the session

* @param int session id

* @return string string of the sessoin

*/

public static function read($id) {

$id = mysql_real_escape_string($id);

$sql = sprintf("SELECT `session_data` FROM `sessions` " .

"WHERE `session` = '%s'", $id);

if ($result = mysql_query($sql, self::$_sess_db)) {

if (mysql_num_rows($result)) {

$record = mysql_fetch_assoc($result);

return $record['session_data'];

}

}

return '';

}

/**

* Write the session

* @param int session id

* @param string data of the session

*/

public static function write($id, $data) {

$sql = sprintf("REPLACE INTO `sessions` VALUES('%s', '%s', '%s')",

mysql_real_escape_string($id),

mysql_real_escape_string(time()),

mysql_real_escape_string($data)

);

return mysql_query($sql, self::$_sess_db) or die("Invalid query: " . mysql_error());

;

}

/**

* Destoroy the session

* @param int session id

* @return bool

*/

public static function destroy($id) {

$sql = sprintf("DELETE FROM `sessions` WHERE `session` = '%s'", $id);

return mysql_query($sql, self::$_sess_db);

}

/**

* Garbage Collector

* @param int life time (sec.)

* @return bool

* @see session.gc_divisor 100

* @see session.gc_maxlifetime 1440

* @see session.gc_probability 1

* @usage execution rate 1/100

* (session.gc_probability/session.gc_divisor)

*/

public static function gc($max) {

$sql = sprintf("DELETE FROM `sessions` WHERE `session_expires` < '%s'",

mysql_real_escape_string(time() - $max));

var_dump($sql);

return mysql_query($sql, self::$_sess_db);

}

}

ini_set('zend.enable_gc', 1);

ini_set('session.gc_probability', 1);

ini_set('session.save_handler', 'user');

session_set_save_handler(array('Session', 'open'),

array('Session', 'close'),

array('Session', 'read'),

array('Session', 'write'),

array('Session', 'destroy'),

array('Session', 'gc')

);

if (session_id() == "") session_start();

//session_regenerate_id(false); //also works fine

if (isset($_SESSION['counter'])) {

$_SESSION['counter']++;

} else {

$_SESSION['counter'] = 1;

}

echo '
SessionID: '. session_id() .'
Counter: '. $_SESSION['counter'];

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值