我正在建立一个强大的门户网站(互联网浏览的主机点)。我想从后台作业中销毁会话,并在时间到期后从页面注销用户。
我很困惑如何去做。通常,会话销毁必须编码到用户登录的同一页面中,但我想在特定时间后从登录用户的cron作业中销毁会话。
有没有办法将一些变量传递给在cron下运行的PHP脚本来销毁会话并注销用户?
答案 0 :(得分:1)
如果你使用php的默认会话存储,即文件,你将无法做你想要的。 你需要的是将会话保存到数据库中,有许多php类可以完成这项工作。一旦会话在数据库中,每个会话行将具有关联的用户ID(在登录时填充)和具有最后一个活动的时间戳。 基于这两列,您可以从任何cronjob中删除用户会话。
答案 1 :(得分:0)
你最好的可能是数据库。
将用户session_id与其创建时间和到期时间一起存储。然后只需在CLI类上运行cron job并检查数据库是否有过期的会话列表,然后从服务器中删除它们(位置取决于您的php设置)。 一旦删除它,也会在数据库中将它们标记为无效,这会使会话无效。
当然,您需要稍微更改一下代码,以测试用户是否存在会话。
答案 2 :(得分:0)
你在哪里存储会话?
如果它在/ tmp /文件夹中的序列化文件中(默认) 然后你可以使用:
foreach(scandir('/tmp/') as $session_file)
{
if(substr($session_file, 0, 5) != 'sess_')
{
// not a sessoin file
continue;
}
// load sessoin
$current_session = unserialize(file_get_contents('/tmp/' . $session_file));
// do some tests
if($current_session['abc'] == 'def')
{
// store somthing in it
$current_session['ghi'] = 'jkl';
file_put_contents('/tmp/' . $session_file, serialize($current_session));
// or delete the session file
unlink('/tmp/' . $session_file);
}
}
答案 3 :(得分:0)
你可能有一些运气在服务器上创建一个名为force_session_expire.php的文件,看起来像这样
<?php
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
session_start();
?>
This makes it so there is a 1 in 1 chance that you will kick off garbage collection. then you start the session so the garbage collection will be done.
在您使用的任何命令调度程序中,每小时启动一次(通过wget或curl调用)。