我在 SessionHandlerInterface类中使用以下写方法:
// It will show all php warning, notice, and errors.
error_reporting(E_ALL);
ini_set('display_errors', 1);
问题是如果更新查询的public function write($session_id, $session_data) {
$sth = DBCxn::get()->prepare("UPDATE sessions SET session_data = ?, last_update = NOW() WHERE session_id = ?");
$sth->execute(array($session_data, $session_id));
if ($sth->rowCount() == 0) {
$sth = DBCxn::get()->prepare("INSERT INTO sessions (session_id, session_data, last_update) VALUES (?, ?, NOW())");
$sth->execute(array($session_id, $session_data));
}
没有更改session_data
将返回0,反过来该函数将尝试插入已存在的rowCount()
并返回错误。
我认为这是一个解决方案来执行选择查询以验证session_id
是否存在。
可以使用哪些其他替代方案来解决此问题?
答案 0 :(得分:0)
ValidateSSOToke
之前(在会话开始时)调用 read()
,并且您在其中有write()
个查询。
因此,您已经知道是否应该执行SELECT
或INSERT
- 只需将属性用作“行存在”标记,您可以在UPDATE
内设置该标记您可以稍后在read()
中查看该内容。