php7 -自定义会话处理程序引发session_write_close()警告

nkhmeac6  于 2022-11-28  发布在  PHP
关注(0)|答案(1)|浏览(139)

我把我的项目从php5.6升级到php7.0,并不时收到关于session_write_close()的php警告,告诉我临时文件夹的正确路径。
我的项目使用了一个自定义的数据库会话处理程序,它可以很好地与旧的php版本一起工作。
错误如下:
警告:未知:无法写入会话数据(用户)。请验证session.save第0行“未知”中www.example.com _path的当前设置是否正确(C:\my\path)
下面是我的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;
    }
}

我能做点什么吗?

6rqinv9w

6rqinv9w1#

好了,终于我找到了解决办法:
我的自定义会话处理程序中的数据库适配器在对会话表进行更新时返回0,该更新不更新任何值。
我在write()函数中返回了查询结果。
这个人解释了这个问题。
如果SessionHandlerInterface::write()函数返回false,则会引发此警告。
也许这对其他人也有帮助

相关问题