【问题标题】:Clearing cache if PHP/Yii framework session have expired如果 PHP/Yii 框架会话已过期,则清除缓存
【发布时间】:2013-10-28 10:10:15
【问题描述】:

我有一个使用 PHP 框架 Yii 构建的网站和一个用于搜索查询的缓存表,每个用户都是唯一的。 我想在用户注销或会话过期后立即清除此缓存。我有每个搜索缓存项的创建日期和时间的条目。

如果用户点击注销,这很容易。我只是清除他们的缓存。但我的问题是,如果他们不点击注销按钮,我怎么知道会话是否已过期?我使用的是标准 Yii 用户模型,会话不是存储在 db 中而是存储在文件中(我猜 PHP 标准会话正在处理这个问题)。

我如何知道给定的 userId 已经缓存了他们的会话已过期的项目?

【问题讨论】:

  • 有关如何执行此操作的完整信息,请参阅此链接:stackoverflow.com/questions/520237/…
  • 当用户注销时,将会话条目设置为“logged_out”(新列),然后编写一个通过会话条目(标记为“logged_out”)并清除它们的 cron 脚本?
  • 查看他们以任何一种方式解释的完整帖子。
  • @mahesh 这不是回答我的问题,我需要知道在 Yii 的具体情况下,如何找出给定 userId 的会话是否已过期,如我的帖子中所述
  • 您只能在用户的下一次请求时发现您的会话已过期,或者按照建议使用 cron 作业来完成每次登录。

标签: php yii


【解决方案1】:

当用户登录时,像这样在全局范围内设置会话:

Yii::app()->session['isLoggedIn'] = true;

通过您的控制器,您可以像这样检查用户是否已登录:

// Check If User Is Logged In
if (isset(Yii::app()->session['isLoggedIn']) && Yii::app()->session['isLoggedIn'])
{
    // welcome user
} else {
    // welcome guest
}

要注销用户,清除会话数据,如下所示:

Yii::app()->session['isLoggedIn'] = false;
// or
unset(Yii::app()->session['isLoggedIn']);

在此处了解有关会话管理的更多信息:http://www.larryullman.com/2011/05/03/using-sessions-with-the-yii-framework/

【讨论】:

  • 谢谢,这是在 CLI 中执行此操作的某种方式吗?因为我想在用户完全离开网站时清除它,即使没有按下注销按钮
  • 如果您使用会话,则用户在其浏览器窗口打开时登录。秒她/他关闭浏览器窗口,会话被破坏,因此注销用户。
猜你喜欢
  • 2012-05-14
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2019-08-30
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多