php7的zend会话数据库中出错
我的应用程序需要使用数据库而不是文件来进行会话管理。 我的应用程序基于Zend Framework 1.12.17、PHP5.6.25,实际上是基于wampserver 这是我的config.iniphp7的zend会话数据库中出错,php,database,session,zend-framework,php-7,Php,Database,Session,Zend Framework,Php 7,我的应用程序需要使用数据库而不是文件来进行会话管理。 我的应用程序基于Zend Framework 1.12.17、PHP5.6.25,实际上是基于wampserver 这是我的config.ini resources.session.use_only_cookies = true resources.session.gc_maxlifetime = 864000 resources.session.remember_me_seconds = 864000 resources.session.g
resources.session.use_only_cookies = true
resources.session.gc_maxlifetime = 864000
resources.session.remember_me_seconds = 864000
resources.session.gc_probability = 1
resources.session.gc_divisor = 100
resources.session.saveHandler.class = "Zend_Session_SaveHandler_DbTable"
resources.session.saveHandler.options.name = "app_session"
resources.session.saveHandler.options.primary = "id"
resources.session.saveHandler.options.modifiedColumn = "modified"
resources.session.saveHandler.options.dataColumn = "data"
resources.session.saveHandler.options.lifetimeColumn = "lifetime"
当我想将php升级到PHP7.0.10时,出现了一个警告
警告:会话\写入\关闭():无法写入会话数据(用户)。请验证第732行D:\wamp\www\myapp\top\library\versions\ZendFramework-1.12.17-minimal\library\Zend\session.php中session.save\u路径的当前设置是否正确(D:\wamp\www\myapp\top\session)
我在寻找这个问题的根源。你有什么想法吗
非常感谢2016年9月(生命终结)。这意味着它将不再得到改善。代码库太旧,无法很好地与PHP7配合使用
无论如何,您至少有两个选择:
除了edigus answer之外,这里还有一个扩展存储处理程序的简单实现:
<?php
require_once 'Zend/Session/SaveHandler/DbTable.php';
// NOTE: To fix an issue with Zend_Session_SaveHandler_DbTable on PHP 7 this class extends it and overrides the write
// method to simply always return true.
//
// See: https://stackoverflow.com/a/44985594/1510754
// See: https://github.com/zendframework/zf1/issues/665
// See: https://github.com/zendframework/zf1/pull/654
class My_Session_SaveHandler_DbTable extends Zend_Session_SaveHandler_DbTable
{
public function write($id, $data)
{
parent::write($id, $data);
return true;
}
}
问题写在这里:
因为返回0但不引发异常的更新仍然是一个成功的查询,没有错误
因此,函数write
将返回false
而不是true
,PHP7.0需要true
结果
您可以通过在Zend/Session/SaveHandler/DbTable.php
中更改以下内容来解决此问题:
if ($this->update($data, $this->_getPrimary($id, self::PRIMARY_TYPE_WHERECLAUSE))) {
致:
或者,如果
,也可以删除,将其转换为指令,并保持$return=true代码>。因为在出错时,查询应该引发异常,所以任何无异常的update()
都是好的。我将测试第二个选项。如果有问题,我将降级到php5.6。谢谢!
if (is_int($this->update($data, $this->_getPrimary($id, self::PRIMARY_TYPE_WHERECLAUSE)))) {