如何在数据库中存储会话? 我是用这段代码做的:
function write ($session_id, $session_data)
// write session data to the database.
{
if (!empty($this->fieldarray)) {
if ($this->fieldarray['session_id'] != $session_id) {
// user is starting a new session with previous data
$this->fieldarray = array();
} // if
} // if
if (empty($this->fieldarray)) {
// create new record
$array['session_id'] = $session_id;
$array['date_created'] = getTimeStamp();
$array['last_updated'] = getTimeStamp();
$array['session_data'] = addslashes($session_data);
$this->_dml_insertRecord($array);
} else {
// update existing record
if (isset($_SESSION['logon_user_id'])) {
$array['user_id'] = $_SESSION['logon_user_id'];
} // if
$array['last_updated'] = getTimeStamp();
$array['session_data'] = addslashes($session_data);
$this->_dml_updateRecord($array, $this->fieldarray);
} // if
return TRUE;
} // write
但我应该如何像以前一样自动删除它。我的意思是如何在超时后自动删除会话?
答案 0 :(得分:1)
我不得不在不久前处理这个问题,并且有两种解决方案,这两种解决方案都不是很漂亮,但现在就可以了。
按事件顺序(松散地),您的脚本将检查是否有会话ID发送到服务器,然后它将查看该会话是否在您的数据库中,以及该会话是否有过期。一旦建立了与会话数据库的连接,就可以考虑对超过当前时间戳的过期日期的所有记录运行DELETE查询。然后搜索用户刚刚发送的ID。这样每次人们使用您的网站时都会进行清理
您可能另外考虑的另一种方法是使用CHRON Job或其他自动运行的脚本,每隔一段时间运行一次,以清除会话表中过期的条目。如果您的网站收到轻微和不经常的流量,这是一个很好的方法。
这种方法的组合。在验证会话时使用脚本,检查找到会话数据的过期日期。如果找到了ID,但会话已过期,请删除会话并开始新会话。如果你这样做,你将不必遇到太多的ID冲突问题或许多查询减慢你的服务器速度。您仍然可以在每天结束时运行您的chron作业以进行完全清理。
确保您的系统有某种类型的注销按钮,手动注销的操作将触发删除用户会话。
答案 1 :(得分:0)
看看HTTP_Session2。来自PEAR文档:
HTTP_Session2 使用DB和MDB2包提供额外的功能,例如会话数据的数据库存储。它还引入了新方法,例如isNew(),useCookies(),setExpire(),setIdle(),isExpired(),isIdled()等。
如果要实现自己的功能,请查看该程序包内MDB2.php
中的代码。它包含一个垃圾收集方法(gc),它与session_set_save_handler相结合应该可以解决问题。
答案 2 :(得分:-2)
在代码session_destroy();
结束时关闭会话:
<?php
session_destroy();
?>