我使用下面的代码跟踪了img标记的在线用户会话。
<img src="http://www.somedomain.com/track/login.php" alt="" title="" width="1" height="1" />
使用上面的代码,我创建了一个管理部分来显示在线用户。
现在,由于某种原因。我必须从管理部门结束在线用户的会话。
任何人都可以帮我一个。
注意:
在用户页面中,用
处理用户会话if(authenticated) {
$_SESSION['username']=name;
$_SESSION['id']=id;
}
答案 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 path和here 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)并将会话数据存储在文件和/或数据库中。换句话说,使用自定义会话处理程序,我认为您的任务会更容易。