【问题标题】:SessionHandlerInterface write method alternativesSessionHandlerInterface 写方法替代
【发布时间】:2016-02-02 16:30:51
【问题描述】:

我正在为 SessionHandlerInterface 类使用以下写入方法:

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对于更新查询没有改变rowCount()会返回0,反过来该函数会尝试插入一个已经存在的session_id并返回错误。

我认为作为一种解决方案来进行选择查询以验证 session_id 是否存在。

还有哪些其他方法可以解决这个问题?

【问题讨论】:

    标签: php mysql session


    【解决方案1】:

    read()write() 之前被调用(在会话开始时),您将在其中有一个SELECT 查询。

    因此,您已经知道是否应该执行 INSERTUPDATE - 只需将属性用作“行存在”标志,您可以在 read() 内部设置它,然后您可以稍后检查在write()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多