Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php &引用;关闭其他会议”;按钮_Php_Session_Sessionid - Fatal编程技术网

Php &引用;关闭其他会议”;按钮

Php &引用;关闭其他会议”;按钮,php,session,sessionid,Php,Session,Sessionid,我想在我的PHP web应用程序中添加一个“关闭其他活动会话”按钮 我考虑在MySQL表上跟踪(userid、sessionid、expiration),并通过以下方式终止会话: $currentsessionid=session_id(); foreach($othersessions as $session){ sessionid($session['sessionid']); session_start(); session_destroy(); } mysql_q

我想在我的PHP web应用程序中添加一个“关闭其他活动会话”按钮

我考虑在MySQL表上跟踪(userid、sessionid、expiration),并通过以下方式终止会话:

$currentsessionid=session_id();
foreach($othersessions as $session){
    sessionid($session['sessionid']);
    session_start();
    session_destroy();
}
mysql_query("DELETE FROM sessions WHERE userid = $currentuserid AND sessionid <> $currentsessionid");
session_id($currentsessionid);
session_start();
$currentsessionid=session_id();
foreach($othersessions作为$session){
sessionid($session['sessionid']);
会话_start();
会话_destroy();
}
mysql_查询(“从userid=$currentuserid和sessionid$currentsessionid的会话中删除”);
会话id($currentsessionid);
会话_start();
如果用户已登录,则在每次会话_start()后,该表也会更新,删除过期的条目

每次用户登录时,都会删除过期条目


这是正确的方法吗?有什么建议吗?

在PHP中,会话通常是隔离的。您需要创建自己的会话处理程序,并将会话(加上一些额外的跟踪信息)写入数据库,以便更易于管理

例如,与您的问题一样,
userid
。然后可以搜索特定用户的会话

您应该具有的另一个字段是时间戳,这样您就可以让会话过期,例如,如果超过X小时,则将其丢弃

如果愿意,还可以查看用户是否拥有现有会话并导入旧会话。然而,这可能会带来安全问题。您需要考虑当攻击者而不是真正的用户登录时会发生什么

攻击者甚至可以将有效用户抛出系统吗?这应该防止


还要考虑到您可以在新会话ID下接管上一个会话的会话数据。这类似于,登录应始终重新生成会话ID,以及注销和其他重要步骤(例如,在更改电子邮件地址之前重新验证).

我认为语言API应该提供一种方法来跟踪服务器端的所有现有会话。使用
删除
只让您知道用户上次登录的时间,如果您想拥有日志记录,该怎么办?@theMarceloR:令人惊讶的是,我认为它没有,我找不到它。@EmCo:有趣的想法,我将考虑在另一个表上实现会话历史(如IP和日期/时间等更多信息)。时间戳是我提到的字段到期,当然,更改密码或电子邮件时的ReAuthe当然已经实现。另外,新登录仅在注销(调用session_destroy())或新会话后发生,因为在用户已通过身份验证时调用login函数会引发异常,因此新登录总是会收到新的sessionid。我想我走对了。谢谢你的意见。