Session ZF2用户记得我不工作吗

Session ZF2用户记得我不工作吗,session,cookies,zend-framework2,remember-me,Session,Cookies,Zend Framework2,Remember Me,我正在尝试为我的ZF2 v2.2站点实现rememberme功能。 以下是我迄今为止所做的工作: 我为会话管理器创建了一个将会话写入db的服务: 'session' => array( 'remember_me_seconds' => 2419200, 'use_cookies' => true, 'cookie_httponly' => true, ), 'session_manager' => function (Se

我正在尝试为我的ZF2 v2.2站点实现rememberme功能。 以下是我迄今为止所做的工作: 我为会话管理器创建了一个将会话写入db的服务:

'session' => array(
    'remember_me_seconds' => 2419200,
    'use_cookies' => true,
    'cookie_httponly' => true,
),


        'session_manager' => function (ServiceManager $sm) {
            $adapter = $sm->get('db_adapter');
            $config = $sm->get('app_config');
            $sessionOptions = new Session\SaveHandler\DbTableGatewayOptions();
            $sessionTableGateway = new TableGateway('tbl_session', $adapter);
            $saveHandler = new Session\SaveHandler\DbTableGateway($sessionTableGateway, $sessionOptions);
            $sessionConfig = new Session\Config\SessionConfig();
            $sessionConfig->setCookieDomain(ACTIVE_SITE);
            $sessionConfig->setCookieSecure(true);
            $sessionConfig->setOptions($config['session']);
            $sessionManager = new Session\SessionManager($sessionConfig, NULL, $saveHandler);
            $sessionManager->start();
            return $sessionManager;
        },
并将此会话管理器用于我的会话和
AuthenticationService

Session\Container::setDefaultManager($sm->get('session_manager'));

        'user_auth_service' => function (ServiceManager $sm) {
            $authService = new \Zend\Authentication\AuthenticationService();
            $session = new \Zend\Authentication\Storage\Session(null, null, $sm->get('session_manager'));
            $authService->setStorage($session);
            return $authService;
        },
在我的登录表单中,我使用“记住我”:

 public function login(\User\Model\User $user)
    {
        $authAdapter = $this->getServiceLocator()->get('user_auth_adapter');
        $authAdapter->setIdentity($user->username);
        $authAdapter->setCredential($user->password);

        /* @var $authService \Zend\Authentication\AuthenticationService */
        $authService = $this->getServiceLocator()->get('user_auth_service');
        $result = $authService->authenticate($authAdapter);

        switch ($result->getCode()) {

            case \Zend\Authentication\Result::FAILURE_IDENTITY_NOT_FOUND:
            case \Zend\Authentication\Result::FAILURE_CREDENTIAL_INVALID:
                return $result->getMessages();
                break;

            case \Zend\Authentication\Result::SUCCESS:
                $user = $authAdapter->getResultRowObject(null, 'password');
                $user->rolls = $this->getServiceLocator()->get('user_role_table')->getRoles($user->id);
                $authService->getStorage()->write($user);
                getSM()->get('session_manager')->rememberMe();
                return true;
                break;

            default:
                return 'Invalid Credential Provided !';
                break;
        }
    }

但是应用程序仍然不记得我。我在这里做错了什么??

编辑:哦,对了,我现在记得了。“记住我”秒是针对服务器的,但如果客户端删除cookie则没有好处。您应该使用cookie_生存期和设置为适当值的记住选项。尝试以下方法

session' => array(
    'cookie_lifetime' => 2419200, //SEE ME
    'remember_me_seconds' => 2419200, //SEE ME
    'use_cookies' => true,
    'cookie_httponly' => true,
),
让我知道它是否有效

忽略以下内容。 我认为“记住我”选项不起作用。我看了一下ZF2代码,这里有一些迹象表明它是无用的。查找
//查看我的评论

public function setStorageOption($storageName, $storageValue)
{
    $key = false;
    switch ($storageName) {
        // SEE ME
        case 'remember_me_seconds':
            // do nothing; not an INI option
            return;
        case 'url_rewriter_tags':
            $key = 'url_rewriter.tags';
            break;
        default:
            $key = 'session.' . $storageName;
            break;
    }

    $result = ini_set($key, $storageValue);
    if (FALSE === $result) {
        throw new \InvalidArgumentException("'" . $key .
                "' is not a valid sessions-related ini setting.");
    }
    return $this;
}


/**
 * Retrieve a storage option from a backend configuration store
 *
 * Used to retrieve default values from a backend configuration store.
 *
 * @param  string $storageOption
 * @return mixed
 */
public function getStorageOption($storageOption)
{
    switch ($storageOption) {
        // SEE ME
        case 'remember_me_seconds':
            // No remote storage option; just return the current value
            return $this->rememberMeSeconds;
        case 'url_rewriter_tags':
            return ini_get('url_rewriter.tags');
        // The following all need a transformation on the retrieved value;
        // however they use the same key naming scheme
        case 'use_cookies':
        case 'use_only_cookies':
        case 'use_trans_sid':
        case 'cookie_httponly':
            return (bool) ini_get('session.' . $storageOption);
        default:
            return ini_get('session.' . $storageOption);
    }
}

也许你可以利用或从中得到一些想法