跨浏览器:PHP杀死会话

时间:2013-10-16 19:55:19

标签: php session sessionid

我试图在登录之前杀死用户之前的会话:更多上下文,我想阻止用户在不同的浏览器或位置使用相同的用户名/密码登录,阻止他们操纵会话状态(如跨浏览器的游戏平衡。

这是我到目前为止所做的,但没有成功 1)获取用户的最后一个session_id,当用户成功登录时,该session_id存储在数据库中,并将其保存在名为$ old_session_id

的变量中

2)尝试使用以下代码删除最后一个会话

session_id($old_session_id);
session_start();
session_destroy();

3)尝试使用session_start()为用户启动一个新的干净的会话

我所看到的是新会话未启动 - 用户已注册两个浏览者

感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

由客户端计算机上设置的cookie标识的PHP会话,并且浏览器之间不共享cookie。这不是问题。

您在#2中的代码可能会明确地将该用户的会话当前会话ID更改为上一个浏览器中会话的ID会导致您尝试解决的问题

此外,每次请求只能调用session_start() ,因此当然#3失败。

简而言之,就是停止做你在问题中提到的所有事情,你的问题就会自行解决。

答案 1 :(得分:0)

一旦会话被销毁,就必须创建一个新会议。

如果您只想清除会话中的值,也可以尝试:

session_start();
$_SESSION = array(); //unset all session variables

答案 2 :(得分:0)

会话仅存储在您的浏览器中,如果您想查看用户是否已登录其他浏览器,则需要使用数据库

在状态为1或0的数据库中添加一行

1 =“在线”;

0 =“离线”;

在您的登录页面中检查用户状态(如果1

$query=mysql_query("select status from table_name were username=$_POST['username']");
$status=$query['status'];
if($status == 1)
{
redirect him to a page saying the account is already logged in
}else
{
let him in and update the database status = 1
}
在注销页面中

 将用户状态更新为0,使其脱机

如果您只想删除所有会话使用 在破坏之前首先使用会话启动然后再次启动会话会导致您无法在不启动会话的情况下销毁会话

session_start();
session_destroy();
session_start();

但如果您想删除特定会话,则需要使用

unset($_SESSION['sessionname']);

答案 3 :(得分:0)

您可以使用session_regenerate_id创建新ID。 清除会话数据,重新生成id并开始新的。

http://php.net/manual/en/function.session-regenerate-id.php