SessionHandlerInterface编写方法替代方案

时间:2016-02-02 16:30:51

标签: php mysql session

我在 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是否存在。

可以使用哪些其他替代方案来解决此问题?

1 个答案:

答案 0 :(得分:0)

ValidateSSOToke之前(在会话开始时)调用

read(),并且您在其中有write()个查询。

因此,您已经知道是否应该执行SELECTINSERT - 只需将属性用作“行存在”标记,您可以在UPDATE内设置该标记您可以稍后在read()中查看该内容。