我为我的网站创建了一个php mysql登录系统。一切正常,但是我遇到的问题是会话解析到与创建/登录不同的浏览器中。 具体来说,我的意思是,当我登录chrome浏览器时,该浏览器会创建一个会话,但也会在Opera浏览器中继续,因为它也访问我的会话,并使我使用与chrome相同的用户身份登录。
我检查了登录fb,stackoverflow和许多其他网站的情况,以查看是否发生了相同的情况,并且从Chrome登录时,它们的会话继续在Opera上进行,但没有发生。但是在我的网站情况下,确实发生了这种情况,因为当我登录chrome时,我也可以通过Opera访问我的用户。
如何防止这种情况发生,因为我不想像其他站点一样将我的会话共享给任何其他浏览器。如果它们可以,我也应该怎么做? 与其他网站一样,如何区分与浏览器的会话?
我用来创建会话的代码排序如下所示。
注意:这不是完整的代码,我确实使用密码的哈希并采取其他安全措施。这只是我如何创建会话的概述。
session_start();
if (isset($_POST['email']) and isset($_POST['password'])){
$email = $_POST['email'];
$password = $_POST['password'];
$query = "SELECT * FROM `users` WHERE email='$email' and password='$password'";
$result = mysql_query($query) or die(mysql_error());
if(mysql_num_rows($result) > 0){
$_SESSION['email'] = $email;
echo "You are logged in.";
header("Location: index.php?log=success");
unset($_POST);
} else {
echo " Something went wrong ";
}
}
答案 0 :(得分:1)
我为您建议的是创建一个Logs
表或表的任何名称,一旦用户登录,您就会在其中插入数据
例如
INSERT INTO Logs VALUES (user_id, is_logged_in, timestamps) // the "is_logged_in" here could be a BOOLEAN
现在,为了防止其他人使用您有条件的同一帐户登录不同的平台,或检查登录模块以获取用户在{{1}中拥有的最新记录 }表
示例代码段:
Logs
上面的代码获取SELECT * FROM Logs WHERE user_id = (Session of the logged in user) ORDER BY timestamps (you may use "created_at" if you have) DESC LIMIT 1
表中已登录用户的最后一条记录,现在测试Logs
是否为true标志,然后将用户重定向回登录页面,或者阻止他/她继续使用该帐户