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'];
?>
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的php session mysql_php session mysql存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql的基本数据类型_mysql基本
- 下一篇: 简述一下你对mysql事物的理解_面试题