【发布时间】:2014-05-23 19:28:49
【问题描述】:
我目前正在从头开始构建一个小网站。我使用自定义 SessionHandler 将我的会话存储在似乎工作正常的数据库中。因此,一旦用户登录,我就可以将相关信息(例如语言)存储在会话数据中。
但是,我还想为(尚未)登录的用户存储某些数据 - 再次主要是所选语言,还有一些其他内容。为了保持干净,我想在一个地方设置所有这些标准值,只要有一个没有有效登录的会话。
最好的地方显然应该是我的处理程序,但是我不确定要使用哪个函数以及如何在其中获取我的数据。我已经附上了下面代码的重要部分。
我确信有一个简单的解决方案,但到目前为止我还没有做到。而且这对谷歌来说也是一个可怕的问题..
感谢您的帮助!
public function __construct() {
$this->databaseController = new DatabaseController();
ini_set('session.gc_maxlifetime', SESSION_MAX_LIFETIME);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
session_set_save_handler(
array($this, "_open"),
array($this, "_close"),
array($this, "_read"),
array($this, "_write"),
array($this, "_destroy"),
array($this, "_gc")
);
}
public function _open() {
return $this->databaseController->check();
}
public function _close() {
return $this->databaseController->close();
}
public function _read($id) {
$result = $this->databaseController->getFirstRow("SELECT sessionData FROM bf1_sessions WHERE sessionID = '".mysql_real_escape_string($id)."'");
if (!empty($result['sessionData'])) {
return $result['sessionData'];
}
else {
return '';
}
}
public function _write($id, $data) {
$access = time();
$result = $this->databaseController->executeQuery("REPLACE INTO bf1_sessions (sessionID, sessionAccess, sessionData) VALUES ('".mysql_real_escape_string($id)."', '".intval($access)."', '".mysql_real_escape_string($data)."')");
return $result;
}
【问题讨论】: