1

我有一个功能可以在会话到期前 10 分钟前向登录用户显示警报。如果用户在指定时间内空闲,则会在会话到期前 10 分钟向用户显示确认信息。如果他希望继续当前会话他可以这样做,或者他可以延长会话。所以我像下面这样实现它。

  //For extending the session expiry
    public function extendsessionAction(){
        $sessTimeOut        = 1440;
        $session            = new Zend_Session_Namespace('Zend_Auth');
        $session->reqTime   = time();
        $session->setExpirationSeconds($sessTimeOut);
        $warnTime           = 3000;
        $session->warnTime  = $warnTime;

        $this->getHelper('viewRenderer')->setNoRender();
        $this->_helper->layout()->disableLayout();
    }
//For checking the session expiry
    public function checksessionexpiryAction(){
        $session            = new Zend_Session_Namespace('Zend_Auth');
        $reqTime            = $session->reqTime;
        $warnTime           = $session->warnTime;
        $sessTimeOut        = 1440;

        if((time() - $reqTime) >= $warnTime){
            echo 'Warning';
        }
        else if((time() - $reqTime) >= $sessTimeOut){
            echo 'Logout';
        }
        else{
            echo 'Continue';
        }

        $this->getHelper('viewRenderer')->setNoRender();
        $this->_helper->layout()->disableLayout();
    }

以下是使用的客户端代码,它写在标题模板中,因此它将包含在所有页面中

$(document).ready(function(){
    extendSessionExpiry();
    checkSessionTimeEvent = setInterval("checkSessionExpiry()",8 * 60000);
});

function extendSessionExpiry(){
    $.ajax({
        url     : base_url+'/default/Dashboard/extendsession',
        type    : 'post',
        dataType: 'json',
        success : function(result){
        }
    });
}

function checkSessionExpiry(){
    $.ajax({
        url     : base_url+'/default/Dashboard/checksessionexpiry',
        type    : 'post',
        success : function(result){
            if(result == 'Warning'){
                showSessionWarning();//Will show a popup to continue or extend the session.Extending the session will call extendSessionExpiry()
            }
            else if(result == 'Logout'){
                dontWarn();
                window.location = base_url+'/Index/logout';
            }
        }
    });
}

所以我在我的应用程序中使用了zend服务器。我的问题是,如果在多个选项卡中打开应用程序,那么它将退出。这意味着会话即将过期。我听说这与zend服务器会话集群有关锁定机制。有人可以解释什么是 excat 问题。

4

1 回答 1

1

它不应该自动注销..服务器不知道您打开了另一个窗口/选项卡,因此它将对它们一视同仁。

我假设您已经测试过它可以独立运行,例如在打开新标签之前刷新页面?然后在打开新标签时?您是否尝试过实现一种方法来显示他们在刷新页面时还剩多少时间......甚至是股票行情?

我从来没有听说过 Zend 会因为标签而终止会话。

于 2013-11-16T07:19:19.473 回答