2013-07-12 197 views
0

我正在写公交车票预订的typo3 v6.1 extbase扩展。而且我在控制器Typo3会话超时设置

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分钟后没有会话清除。

任何帮助?

谢谢

回答

0

最有可能为你存储会话数据,而无需用户登录,您将需要添加的超时处理自己,好在这是可以做到轻松一些小器官功能障碍综合征:

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

    // if current session is to old invalidate it and return null 
    if (mktime() >= $this->getSessionTimeout()) { 
     $this->cleanUpSession(); 
     return null; 
    } 
    // else set new timeout and return the data... 
    $this->setSessionTimeout(); 
    return $sessionData; 
} 


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

protected function cleanUpSession() { 
    $GLOBALS['TSFE']->fe_user->setKey('ses', 'basket', NULL); 
    $GLOBALS['TSFE']->fe_user->setKey('ses', 'basketLifetime', NULL); 
    $GLOBALS['TSFE']->fe_user->storeSessionData(); 
    return $this; 
} 

protected function setSessionTimeout() { 
    $GLOBALS['TSFE']->fe_user->setKey('ses', 'basketLifetime', mktime() + 300); 
    $GLOBALS['TSFE']->fe_user->storeSessionData(); 
    return $this; 
} 

protected function getSessionTimeout() { 
    return $GLOBALS['TSFE']->fe_user->getKey('ses', 'basketLifetime'); 
} 

所以你可以创建一个简单的重定向到一些简单的动作,如果会话被清除:

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

非常感谢!很棒。 –