【问题标题】:Session not getting cleared in YiiYii 中的会话未清除
【发布时间】:2013-10-20 12:56:54
【问题描述】:

我有一个奇怪的问题。我在 Yii 中构建了一个 Web 应用程序。

每当我从应用程序注销时,用户就会返回到主页。但是,如果我刷新页面。用户再次登录。

这里是配置文件

'session' => array(
       'class'=>'CDbHttpSession',
        'timeout'=>$params['session_timeout'],
        'autoStart'=>true,
    ),

这是我的注销代码

    Yii::app()->session->clear();
    Yii::app()->session->destroy();
    Yii::app()->cache->flush();
    Yii::app()->user->logout();

最近我注意到运行时文件夹中有一个名为 session-1.1.8 的文件。它不会在注销时被删除。但是,如果我手动删除它,那么用户将永久注销。

所以我的问题是

1)我在这里做错了什么吗?

2)这个“session-1.1.8”文件是什么?

3)如何永久退出?

【问题讨论】:

  • 好的。当你使用 CDbHttpSession 时 session-1.1.8.db 文件即将到来。当我使用 CHttpSession 时,它不会来。
  • 所以我不能删除这个文件,所有用户会话都会丢失?

标签: php session yii


【解决方案1】:

来自 Yii 文档:

默认情况下,它将使用一个名为的 SQLite3 数据库 应用程序运行时目录下的“session-YiiVersion.db”。你 还可以指定 connectionID 以便它使用 DB 应用程序 访问数据库的组件。

这是文件的来源,尝试使用您自己的 db 组件,应该可以修复它。

Yii::app()->user->logout(); 已经调用了Yii::app()->getSession()->destroy();,因此您无需手动进行。

【讨论】:

  • 我的应用程序作为休息客户端运行,我没有任何数据库。
  • 我还没有在 config/main 中初始化 db 组件?我应该为connectionID做什么?
  • 你是如何登录用户的?也许那时那里正在发生其他事情。
  • 实际上我正在调用rest api来检查登录凭据。我也扩展了 CWebUser
  • 您可以在注销之前/之后检查该 sqlite3 数据库中的内容吗?
【解决方案2】:

我用这一套,效果很好:

'cache'=>array(
   'class' => 'CFileCache', 
),

'session' => array(
   'class' => 'CDbHttpSession',
   'timeout' => 60*60*24*30*12*5, 
),  

60*60*24*30*12*5 = 60 秒、60 分钟、24 小时、30 天、12 个月、5 年

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    相关资源
    最近更新 更多