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

| 我使用下面的代码使用img标签跟踪了在线用户会话。
<img src=\"http://www.somedomain.com/track/login.php\" alt=\"\" title=\"\" width=\"1\" height=\"1\" />
使用上面的代码,我创建了一个管理部分来显示在线用户。 现在,由于某种原因。我必须从管理部分结束在线用户的会话。 谁能帮我一个。 注意: 在用户页面中,用户会话使用
if(authenticated) {
 $_SESSION[\'username\']=name;
 $_SESSION[\'id\']=id;
}
    
已邀请:
        我将通过以下方式实现此目的:使用文件存储会话,将这些文件存储在您具有读/写访问权限的特定位置,给它们指定一个可预测的名称(例如,用户名上的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\");
这段代码可能对您来说不是开箱即用的,但这是遵循的好方法     
        我认为,如果您可以获取用户的PHP会话ID,则可以执行以下操作:
session_id(\"<that session id>\");
session_start();
session_destroy();
请注意,这也意味着管理员将失去其会话。这里描述5。     
        使用以下功能:
session_unset();
session_destroy();
    
        如果要结束用户会话,则可以从逻辑上或技术上进行。 从逻辑上讲,您可以篡改用户会话数据,并将删除标志设置为true。然后,您的应用程序逻辑需要检查是否设置了已删除标志,如果已设置,则结束该用户的会话。 从技术上讲,您可以通过删除会话的会话存储来结束任何会话。这多少取决于您配置的存储,但是从根本上讲,这意味着获取会话文件的文件名并将其从磁盘中删除。 我认为第二个变体更容易。只需获取用户会话ID并将其映射到文件名即可。路径请参见此处,路径和名称请参见此处。 对于逻辑变体,您实际上实际上还需要收集会话数据的文件名,将其打开,读取它的内容,然后添加标志并再次存储它。 因此,这是我想到的两种实现您所寻找的方法。如果将会话数据放入数据库中,可能会更容易:将会话存储在数据库中。     
        您可能需要将数据推送给用户。看看彗星技术和类似的替代方法     
        我认为您要执行的操作没有简单的答案。 正如Tudor所说的,您可以删除存储在特定目录中的会话文件(目录,可以像在他的示例中一样动态设置)-请参见他的示例。 另一种方法是编写自己的会话处理类(有关示例,请参见PHP手册-http://php.net/manual/en/session.customhandler.php),并将会话数据存储在文件和/或数据库中。换句话说,使用您的自定义会话处理程序,我认为您的任务会更容易。     

要回复问题请先登录注册