首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Typo3会话超时设置

Typo3会话超时设置
EN

Stack Overflow用户
提问于 2013-07-12 14:48:16
回答 1查看 2.4K关注 0票数 0

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

代码语言:javascript
复制
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中设置这些值,但没有成功。

代码语言:javascript
复制
'FE' => array(
'lifetime' => '60',
'sessionDataLifetime' => '60',
),

但在浏览器处于非活动状态1分钟后,没有清除会话。

有什么帮助吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-12 17:51:25

最有可能的是,当你在没有用户登录的情况下存储会话数据时,你需要自己添加超时处理,幸运的是,使用一些小mod就可以很容易地做到:

代码语言:javascript
复制
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');
}

因此,您可以为一个示例创建一个简单的重定向,如果会话被清除,则重定向到某个操作:

代码语言:javascript
复制
if ($this->restoreFromSession() == null) {
    $this->redirect('start');
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17609007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档