【问题标题】:ZF2 RememberMe expires after closing BrowserZF2 RememberMe 关闭浏览器后过期
【发布时间】:2016-12-07 02:14:36
【问题描述】:

我想为我的登录表单设置一个“记住我”cookie,并让它工作,直到我重新打开浏览器。我正在使用 Zend Framework 2 来完成它。

我设置了一个带有复选框的表单,并在验证表单后将它放在我的控制器中:

$userSession = new Container("test");

$sessionManager = $userSession->getManager();
$sessionManager->rememberMe(1209600);
$sessionManager->start();

在 module.config.php 中我有以下会话设置:

'session' => array(
    'name' => 'Test_SESSION',
    'save_path' => realpath('C:\xampp\htdocs\Workspace\test\data\session'),
    'remember_me_seconds' => 1209600,
    'cookie_lifetime' => 1209600,
    'use_cookies' => true,
    'cookie_httponly' => true,
),

最后在module.php中:

$session = new SessionConfig();
$session->setOptions($this->serviceLocator->get("config")["session"]);

我在网上搜索了任何建议并尝试了一些东西,但至少当我关闭浏览器时,cookie 被删除了。删除 cookie 的 Firefox 设置也被检查,因此它们不会被自动删除。有没有人有成功的解决方案或提示?

编辑:当我获取newtake的代码并将$sessionManager->rememberMe();添加到其中时,关闭浏览器后会话仍然存在,但即使登录过程成功完成,我也无法再登录。有人听说过这种好奇心吗?

【问题讨论】:

    标签: php zend-framework2 session-cookies


    【解决方案1】:

    需要将SessionConfig 设置为SessionManager。这是我的配置

    'service_manager' => array(
        'factories' => array(
            'Zend\Session\SessionManager' => function ($sm) {
                $sessionConfig = new \Zend\Session\Config\SessionConfig();
                $sessionConfig->setOptions([
                    'use_cookies' => true,
                    'gc_maxlifetime' => 1728000,
                    'cookie_lifetime' => 1728000,
                    'name' => 'COOKIE_NAME',
                ]);
    
                $sessionManager = new \Zend\Session\SessionManager($sessionConfig);
                $sessionManager->start();
                return $sessionManager;
            }
        )
    )
    

    【讨论】:

    • 感谢您的回复,但是如何在控制器中使用此服务?
    • 会话将被启动,但在关闭浏览器后仍然被删除:/
    • @HansMartin 使用很简单,只需要从Container 创建一个对象。示例$session = new Container('container-name');
    • @HansMartin 这个配置和容器对象就是全部。会话不需要其他代码。
    • 我现在知道了,但还有一些问题...... rememberMe 功能现在可以工作,但只有当我在我的服务中添加这个$session = new Container("user"); $session->username = $userName;$session->getManager()->rememberMe(); 时它才有效。当我在配置中写入$sessionManager->rememberMe() 并按照您的建议在没有$session->getManager()->rememberMe(); 的情况下启动会话时,为什么它不起作用?
    猜你喜欢
    • 2015-07-30
    • 2016-09-23
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多