Session Typo3会话超时设置

Session Typo3会话超时设置,session,typo3,Session,Typo3,我正在编写typo3 v6.1 extbase扩展,用于公共汽车票预订。我在控制器中使用此代码使用会话将项目(不同日期的票据)存储到篮子中 protected function restoreFromSession() { $sessionData = $GLOBALS['TSFE']->fe_user->getKey('ses', 'basket'); return unserialize($sessionData); } protected functi

我正在编写typo3 v6.1 extbase扩展,用于公共汽车票预订。我在控制器中使用此代码使用会话将项目(不同日期的票据)存储到篮子中

protected function restoreFromSession() {
      $sessionData = $GLOBALS['TSFE']->fe_user->getKey('ses', 'basket');
      return unserialize($sessionData);
}

protected function writeToSession($object) {
    $sessionData = serialize($object);
    $GLOBALS['TSFE']->fe_user->setKey('ses', 'basket', $sessionData);
    $GLOBALS['TSFE']->fe_user->storeSessionData();
    return $this;
}

protected function cleanUpSession() {
   $GLOBALS['TSFE']->fe_user->setKey('ses', 'basket', NULL);
   $GLOBALS['TSFE']->fe_user->storeSessionData();
   return $this;
}
但在这里,如果没有浏览器活动,我只想在篮子中保留项目5分钟。(此处没有用户登录。) 因此,在会话超时后,如果用户继续进行签出,我需要显示错误消息

所以我的问题是如何在用户不活动5分钟后清除会话

我尝试在安装工具中设置这些值,但没有成功

'FE' => array(
'lifetime' => '60',
'sessionDataLifetime' => '60',
),
但在浏览器不活动1分钟后,没有会话清除

有什么帮助吗


谢谢你

很可能因为你在存储会话数据时没有用户登录,你需要自己添加超时处理,幸运的是,使用一些小MOD可以轻松完成:

受保护的函数restoreFromSession(){
$sessionData=unserialize($GLOBALS['TSFE']->fe_user->getKey('ses','basket');
//如果当前会话是旧会话,则使其无效并返回null
如果(mktime()>=$this->getSessionTimeout()){
$this->cleanUpSession();
返回null;
}
//否则设置新超时并返回数据。。。
$this->setSessionTimeout();
返回$sessionData;
}
受保护的函数writeToSession($object){
$sessionData=serialize($object);
$GLOBALS['TSFE']->fe_user->setKey('ses','basket',$sessionData);
$GLOBALS['TSFE']->fe_user->storeSessionData();
$this->setSessionTimeout();
退还$this;
}
受保护函数cleanUpSession(){
$GLOBALS['TSFE']->fe_user->setKey('ses','basket',NULL);
$GLOBALS['TSFE']->fe_user->setKey('ses','basketlifety',NULL);
$GLOBALS['TSFE']->fe_user->storeSessionData();
退还$this;
}
受保护的函数setSessionTimeout(){
$GLOBALS['TSFE']->fe_user->setKey('ses','basketlifety',mktime()+300);
$GLOBALS['TSFE']->fe_user->storeSessionData();
退还$this;
}
受保护的函数getSessionTimeout(){
返回$GLOBALS['TSFE']->fe_user->getKey('ses','basketlifety');
}
因此,您可以创建一个示例,在清除会话时重定向到某个操作:

if($this->restoreFromSession()==null){
$this->redirect('start');
}

非常感谢!效果很好。