把session保存到数据库中:1、数据表:CREATE TABLE sessions (
ses_id varchar(32) NOT NULL default '',
ses_time int(11) NOT NULL default '0',
ses_start int(11) NOT NULL default '0',
ses_value text NOT NULL,
PRIMARY KEY (ses_id)
) TYPE=MyISAM;
ses_id varchar(32) NOT NULL default '',
ses_time int(11) NOT NULL default '0',
ses_start int(11) NOT NULL default '0',
ses_value text NOT NULL,
PRIMARY KEY (ses_id)
) TYPE=MyISAM;
解决方案 »
- what's strange?
- 帮忙写个很简单的正则,谢谢了..就是将*.32199.net匹配到www.32199.net/*
- [求助]如何在插入數據庫前過濾圖片上的鏈接!
- 求一段PHP 格式URL的正则替换
- php 随机函数
- 一般注册名都是不分大小写的吧?
- 关于在mysql字段中保存html代码,然后显示出来的问题
- 请问PHP有获得MYSQL中数据库库名的函数吗?
- 一个PHP页面,下载下来后是PHP输出的内容,请问这个PHP输出的内容可以禁止被下载吗
- 使用phpstorm制作一个登录界面,进去后要有自己的简历
- 如何判断一个GIF图片是动画还是一个普通静止的图片?
- 请问我能否实现在访问者访问我的网站的时候在他的机器上创建一个txt文件?
/*
Free for non-comercial use covered by GPL
If you want to use this in a commercial package
please contact me on [email protected] class allows you to store PHP session data
in your database, it is modified to run with the
PEAR::DB classUPDATED: 10/06/2004 - intermittent update bug fixed
*/
//set sessions handler on php
session_set_save_handler (array(&$session, 'open'),
array(&$session, 'close'),
array(&$session, 'read'),
array(&$session, 'write'),
array(&$session, 'destroy'),
array(&$session, 'gc'));
class session{ var $session_limit = 300; //life of sessions in seconds
function session(&$db){
//set db handler
$this->db = $db;
}
/* Open session, if you have your own db connection
code, put it in here! */
function open($path, $name) {
if (isset($this->db)) return TRUE;
else return FALSE;
} /* Close session */
function close() {
/* This is used for a manual call of the
session gc function */
$this->gc(0);
return TRUE;
} /* Read session data from database */
function read($ses_id) {
$session_sql = "SELECT * FROM sessions WHERE ses_id = '$ses_id'";
$session_res = $this->db->getRow($session_sql);
if (!$session_res) {
return '';
} if ($session_res) {
$ses_data = $session_res["ses_value"];
return $ses_data;
} else {
return '';
}
} /* Write new data to database */
function write($ses_id, $data) {
$session_sql = "UPDATE sessions SET ses_time='" . time()
. "', ses_value='$data' WHERE ses_id='$ses_id'";
$session_res = $this->db->query($session_sql);
if (!$session_res) {
return FALSE;
}
if ($this->db->affectedRows() > 0) {
return TRUE;
} $session_sql = "INSERT INTO sessions (ses_id, ses_time, ses_start, ses_value)"
. " VALUES ('$ses_id', '" . time()
. "', '" . time() . "', '$data')";
$session_res = $this->db->query($session_sql);
if (!$session_res) {
return FALSE;
} else {
return TRUE;
}
} /* Destroy session record in database */
function destroy($ses_id) {
$session_sql = "DELETE FROM sessions WHERE ses_id = '$ses_id'";
$session_res = $this->db->query($session_sql);
if (!$session_res) {
return FALSE;
} else {
return TRUE;
}
} // Garbage collection removes old sessions
function gc($life) {
$ses_life = time() - $this->session_limit;
$session_sql = "DELETE FROM sessions WHERE ses_time < $ses_life";
$session_res = $this->db->query($session_sql);
if (!$session_res) {
return FALSE;
} else {
return TRUE;
}
}
// Users online
function users() {
$users_sql = "SELECT COUNT(ses_id) FROM sessions";
$users_res = $this->db->getOne($users_sql); if (!$users_res) {
return NULL;
} else {
return $users_res;
}
}
}
?>
/*
Example of use, $db is your PEAR DB handler
previously created.
*/
require("sessionclass.php");
$session = new session($db);
session_start();//Now use php sessions as usual?>不想用数据库方法的话,还可以根据session文件时间和session文件个数统计,在unix下有效。
我想用session记录很多数据。。有30来项。。
可是,就是不行。
我做的这个东西,不支持JAVASCRIPT
考虑到效率可以在用户login的时候写入online表,并判断是否有超时用户,如有则将其在online table中删除,如果用户logout删除该记录