如何在PHP中终止用户会话?

时间:2011-06-18 10:01:13

标签: php session tracking administration

我使用下面的代码跟踪了img标记的在线用户会话。

<img src="http://www.somedomain.com/track/login.php" alt="" title="" width="1" height="1" />

使用上面的代码,我创建了一个管理部分来显示在线用户。

现在,由于某种原因。我必须从管理部门结束在线用户的会话。

任何人都可以帮我一个。

注意:

在用户页面中,用

处理用户会话
if(authenticated) {
 $_SESSION['username']=name;
 $_SESSION['id']=id;
}

6 个答案:

答案 0 :(得分:2)

我认为如果你能获得用户的PHP会话ID,你可以做:

session_id("<that session id>");
session_start();
session_destroy();

请注意,这也意味着管理员将失去其会话。 session_id()被描述为here

答案 1 :(得分:1)

使用以下功能:

session_unset();
session_destroy();

答案 2 :(得分:1)

如果您想结束用户会话,您可以在逻辑上或技术上执行此操作。

逻辑上,您可以篡改用户会话数据并将删除标志设置为true。然后,您的应用程序逻辑需要检查是否已设置已删除的标志,如果已设置,则结束该用户的会话。

从技术上讲,您可以通过删除会话存储来结束任何会话。这取决于您配置的存储空间,但基本上这意味着获取会话文件的文件名并将其从磁盘中删除。

我认为第二种变体更容易。只需获取用户会话ID并将其映射到文件名即可。请参阅here for the pathhere for path and name

对于逻辑变体,您实际上也需要收集会话数据的文件名,打开它,读取它的内容,而不是添加标志并再次存储它。

所以这些是我想到达到你所寻找的东西的两种方式。如果将会话数据放入数据库中,可能会更容易:Storing Sessions in a Database

答案 3 :(得分:0)

我将通过以下方式实现此目的:使用文件存储会话,将这些文件存储在您具有读/写访问权限的特定位置,为其提供可预测的名称(例如用户名上的md5) - 以及何时您希望结束用户的会话,只需删除属于该用户的文件。

//get current logged in user user - this way we get it as a GET or POST parameter - NOT safe, because the user can modify this parameter - you could get it from the login form for example
$current_user = md5($_REQUEST["user"]); 
// start user's sessions like this
ini_set('session.save_handler', 'files');
//load the session of the current user 
$current_user = md5($_REQUEST["user"]);
//set the current session id to the one corresponding to current user
session_id($current_user);
session_save_path("/tmp/sessions/");
session_start();

在您的管理部分中,获取用户名作为参数,计算其上的md5,然后删除该用户的会话:

$current_user = md5($_REQUEST["user"]);
unlink("/tmp/sessions/$current_user");

此代码可能无法为您开箱即用,但这是一个很好的方式来关注

答案 4 :(得分:0)

您可能需要将数据推送给用户。看看Comet技术和类似的替代方案

答案 5 :(得分:0)

我认为对你要做的事情没有一个简单的答案。

正如Tudor所说,你可以删除存储在特定目录中的会话文件(一个目录。你可以动态设置,就像他在他的例子中所做的那样) - 看看他的例子。

另一种方法是编写自己的会话处理类(参见PHP手册中的示例 - http://php.net/manual/en/session.customhandler.php)并将会话数据存储在文件和/或数据库中。换句话说,使用自定义会话处理程序,我认为您的任务会更容易。