我正在为汽车票预订编写typo3 v6.1extbase扩展。我使用控制器中的以下代码使用会话将项目(不同日期的门票)存储到篮子中
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分钟后清除会话。
我尝试在install tool中设置这些值,但没有成功。
'FE' => array(
'lifetime' => '60',
'sessionDataLifetime' => '60',
),但在浏览器处于非活动状态1分钟后,没有清除会话。
有什么帮助吗?
谢谢
发布于 2013-07-12 17:51:25
最有可能的是,当你在没有用户登录的情况下存储会话数据时,你需要自己添加超时处理,幸运的是,使用一些小mod就可以很容易地做到:
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');
}https://stackoverflow.com/questions/17609007
复制相似问题