使用Zend_Auth设置和延长会话生命周期

8

我在我的项目中使用Zend_Auth,但是到目前为止还没有弄清楚如何设置会话的生命周期,或者如何延长它(比如说它应该运行5分钟,并且当用户执行操作时应该重置为5分钟),这是我的初始化代码:

        $authAdapter = new Zend_Auth_Adapter_DbTable($this->_model->pdo);
        $authAdapter->setTableName('normal_folks')
           ->setIdentityColumn('username')
           ->setCredentialColumn('password');

        $post = $this->_request->getPost();

        $authAdapter->setIdentity($post['username'])
            ->setCredential($post['password']);
        $auth = Zend_Auth::getInstance();
        $result = $auth->authenticate($authAdapter);

        if($result->isValid())
        {
            $userInfo = $authAdapter->getResultRowObject(null, 'password');
            $authStorage = $auth->getStorage();
            $authStorage->write($userInfo);

            if(strlen($post['refferer']) > 1){
                header("Location: ".$post['refferer']);
            }elseif(strlen($this->_request->getParam('ref_action')) > 1){
                Zend_Controller_Action::_forward($this->_request->getParam('ref_action'),"admin",null,null);
            }else{
                Zend_Controller_Action::_forward("index","admin",null,null);
            }
        }

这是我检查用户是否已登录的方法:

                if(Zend_Auth::getInstance()->hasIdentity()){
                    echo "Woho!";
                }else{
                    die("invalid-identity");
                }

可能就在我的眼前,但我就是想不明白,能帮我吗?拜托了?拜托了?:D

2个回答

14

认证状态存储在注册的Auth Storage中。默认情况下,这是Zend_Session。您可以设置Zend_Auth命名空间的过期时间,例如:

$namespace = new Zend_Session_Namespace('Zend_Auth');
$namespace->setExpirationSeconds(300);

你也可以通过全局配置Zend_Session来进行配置

Zend_Session::setOptions(array(
    'cookie_lifetime' => 300,
    'gc_maxlifetime'  => 300));

在某个操作的情况下,我如何“刷新”生命周期? - Hannes
@Hannes 我认为过期时间会自动随每个请求刷新,所以简单地更新页面将再次给您300秒。 - Gordon
顺便提一下,那里有一个小错别字 ;) $namespace = new Zend_Session_Namespace('Zend_Auth'); 是的,你是对的,每次调用它都会重置,不知道为什么你的第二个解决方案没有起作用(将其放在init()中),但第一个解决方案非常好:D 非常感谢! - Hannes

2
如果您为zend_auth会话使用不同的命名空间,则可以按照以下方式进行设置:
$auth = Zend_Auth::getInstance ();
$auth->setStorage ( new Zend_Auth_Storage_Session ( 'user' ) );

$namespace = new Zend_Session_Namespace('user');
$namespace->setExpirationSeconds(7200); // 2 hours

谢谢您的回答,尽管我无法验证它,因为相关应用程序已不再维护。 - Hannes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接