代码之家  ›  专栏  ›  技术社区  ›  Ron

php7-自定义SessionHandler引发session\u write\u close()警告

  •  0
  • Ron  · 技术社区  · 6 年前

    我从升级了我的项目 php5.6 php7.0 并不时收到关于 session_write_close() ,显示指向临时文件夹的正确路径。

    我的项目使用了一个定制的数据库会话处理程序,它与较早的php版本完美配合。

    错误如下:

    警告:未知:无法写入会话数据(用户)。请验证 会话的当前设置。save\u路径正确(C:\my\path) 第0行中的未知

    这是我的write()功能:

    /**
     * @param string $id
     * @param string $data
     * @return bool
     * @throws Zend_Db_Adapter_Exception
     */
    public function write($id, $data)
    {
        $dateTime = date('Y-m-d H:i:s');
        $newDateTime = date('Y-m-d H:i:s', strtotime($dateTime . sprintf(' + %s seconds', $this->getMaxLifetime())));
    
        $sessionValues = array("id" => $id, "expires_at" => $newDateTime, "session_data" => $data);
    
        $sel = new Zend_Db_Select($this->_zdb);
        $sel->from(self::TABLE_NAME, array('id'))
            ->where('id = ?', $id);
        $sessionExists = (bool)$this->_zdb->fetchOne($sel);
    
        if($sessionExists) {
            $result = $this->_zdb->update(self::TABLE_NAME, $sessionValues, array('id = ?' => $id));
        } else {
            $result = $this->_zdb->insert(self::TABLE_NAME, $sessionValues);
        }
    
        if($result) {
            return true;
        } else {
            return false;
        }
    }
    

    我能做些什么?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   Ron    6 年前

    好的,我终于找到了解决方案:

    自定义会话处理程序中的数据库适配器在更新会话表时返回0,该表不更新任何值。

    我在write()-函数中返回了查询结果。

    guy here explained 问题。

    SessionHandlerInterface::write()函数在返回false时引发此警告。

    也许这对其他人也有帮助。