如果PHP/Yii框架会话已过期,则清除缓存

如果PHP/Yii框架会话已过期,则清除缓存,php,yii,Php,Yii,我有一个用PHP框架Yii构建的网站,还有一个缓存表,用于每个用户都是唯一的搜索查询。 我希望在用户注销或会话过期后立即清除此缓存。我有每个搜索缓存项的创建日期和时间条目 如果用户单击注销,这很容易。我只是清理了他们的缓存。但我的问题是,如果他们不点击注销按钮,我怎么知道会话是否已过期?我使用的是标准的Yii用户模型,会话不是存储在db中,而是存储在文件中(我猜PHP标准会话会解决这个问题) 我如何知道缓存了会话已过期的项目的给定用户ID?当用户登录时,在全局范围内设置会话,如下所示: Yii:

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

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


我如何知道缓存了会话已过期的项目的给定用户ID?

当用户登录时,在全局范围内设置会话,如下所示:

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'] = 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']);

有关会话管理的更多信息,请点击此处:

谢谢,这是在CLI中实现的方法吗?我想在用户完全离开站点时清除它,即使没有按下注销按钮。如果您正在使用会话,则用户在其浏览器窗口打开时登录。sec s/he关闭浏览器窗口,会话被破坏,因此用户将注销。有关如何执行此操作的完整信息,请参阅此链接:当用户注销时,将会话条目设置为“logged_out”(新列),然后编写一个贯穿会话条目(标记为“logged_out”)的cron脚本并清除它们?检查他们以任何一种方式解释的完整帖子。@mahesh这并不是回答我的问题,我需要知道在Yii特定的情况下,如何确定会话是否已针对给定用户ID过期,正如我在帖子中所说的,您只能在用户下一次请求时发现会话已过期,或者,按照建议,使用cron作业检查每个登录。