如果页面请求太快,则Zend会话被破坏

Naz*_*riy 5 php session zend-framework

我的应用程序不是基于MVC模式构建的,而是部分使用Zend Framework组件,如Config,Loader,Session,Auth,Service和XmlRpc.

最近我发现,在某些情况下,如果用户浏览页面太快或按下F5太快,他的会话将被销毁,他将被退出系统.有一个类似的问题,但他的解决方案没有帮助我解决这个问题.

应用程序如何工作

会话配置:

cookie_domain = ".mydomain.com"
name = "myApplicationName"
remember_me_seconds = 864000
save_path = "/path/to/my/session/storage/"
save_handler = "files"
strict = true
use_only_cookies = true
Run Code Online (Sandbox Code Playgroud)

在页面初始化:

$config = new Zend_Config_Ini(CONFIG_DIR . 'session.ini');

Zend_Session::setOptions($config->toArray());

Zend_Session::start();
Run Code Online (Sandbox Code Playgroud)

账户管理员:

function __construct(...)
{
    /**
     * @var $session Zend_Session_Namespace
     */
    $session = Zend_Registry::get('Zend_Auth');

    if(isset($session->identity))
    {
        Zend_Session::rememberMe();
    }
}
Run Code Online (Sandbox Code Playgroud)

注销过程:

if(isset($_GET['logout']))
{
    Zend_Session::destroy(TRUE);
}
Run Code Online (Sandbox Code Playgroud)

是否有其他人遇到过这个问题并且有一些线索可能有什么问题以及如何修复它?

更新

我已经残疾Zend_Session::rememberMe(),现在一切似乎都很好.据我所知,在每次请求时,此方法刷新session_id并重命名会话文件,并且由于读/写性能问题,它无法找到新创建的会话,并且由于该会话处理程序丢失.
只是想知道,将会话存储更改为数据库是否可以解决此问题?

Flo*_*ood 0

我使用它并没有遇到这个问题。我建议 a) 跟踪您的保存路径并查看是否有任何脚本修改此路径的权限 b) 仔细查看会话处理程序是否可以同时打开文件。

简单地说:Zend_Session 本身没有任何魔力,它是一个非常简单的包装器。