gpt4 book ai didi

php - 避免用户在不同的浏览器或系统中登录

转载 作者:行者123 更新时间:2023-11-29 14:08:03 26 4
gpt4 key购买 nike

我有一个由不同用户使用的网络应用程序。我需要做的是避免同一用户登录不同的浏览器或系统。有人可以帮忙吗???提前致谢。

最佳答案

很多答案(即“已登录标志”)都有一个相当大的问题!如果浏览器出现问题怎么办? (机器被格式化,缓存/cookies被清除,等等)然后你就有了一个服务器认为已经登录的用户,但就用户而言还没有......并且将无法登录您必须添加超时,并监视每个请求(以重置超时)。

我建议您在用户每次登录时向他们颁发新的凭据。颁发新凭据的行为会使之前的凭据失效。最简单的方法是创建一个(随机) token 并将该 token 保存到 cookie 和数据库行中。根据数据库值检查 cookie 并确保它是最新的。

请注意,这与其他答案相反(我不清楚这是否与您的意图相反)——不会阻止用户再次登录,但他以前的登录被禁用。

编辑:

我在伪代码中所说的内容:

//to authenticate user
if ($user = sql('select * from users where id = ' . intval($_COOKIE['user_id']) && $_COOKIE['token'] == $user['token']) {
//user is authenticated. the token in their cookie is the same as the token in the db
} else {
//user is not authenticated.
}

//to log user in
if ($user = sql('select * from users where = ' . intval($_REQUEST['user_id']) && $user['password'] == $_REQUEST['password']) {
//user is authenticated and can be logged in now. the user id they passed and password match (though you'll probably be accepting email address and hasing the password...).
$token = rand();
setcookie('user_id', $user['user_id']);
setcookie('token', $token);
sql('update users set token = '$token' where user_id = ' . $user['user_id']);
//now the token in the db has been updated, and only the user that just logged in has it. other instances of this users login don't have it, so can't authenticate
} else {
//user is not authenticated and can't be logged in
}

尽管该代码比伪代码更像 PHP,但它并不意味着按原样运行。 您需要自定义您的数据库库、表架构,确保安全性(通过对密码使用 md5() 等)。我只是想说明这个概念。

编辑:如上所述,此方法的要点是允许用户再次登录,但使之前的登录无效。 (这与不允许用户第二次登录相反。)无论哪种方式,用户都只登录一次 - 问题是您允许第一次还是最后一次。但是,从您现在的评论来看,这似乎不是您(认为)想要的。

尝试阻止用户再次登录充满了陷阱。从最简单的设置开始,用户登录,您在数据库中设置一个“isLoggedIn”值,然后您不允许他们再次登录,直到该值被清除(可能是从您的 logout.php 中清除)。 (这是其他人的建议 - 继续标记他们的答案之一。)如果他们无法注销,您会怎么做?如果他们从桌面登录然后需要从办公室登录?

您是否禁止他们登录?或者,您可能会显示“您确定要登录吗”消息,并允许他们覆盖之前的登录信息。如果是这样,您需要一种方法来使之前的登录无效。所以你又回到了我的 token 建议。 (在这种情况下,使用数据库中 token 的存在来表示他们仍然登录到以前的 session (相当于 isLoggedIn),并在他们注销时将其清除。)

您仍想阻止第二次登录吗?那么您就不能依赖您的用户主动注销。如果他们在办公室怎么办?或者他们从手机登录然后丢失了手机?或者清除他们的cookie。你必须依靠超时。不要设置得太长,否则用户到达办公室时无法登录,也不要设置得太短,否则用户每次喝咖啡都必须登录。 ( session cookies 可能对她有帮助,但你不能依赖它们,因为许多人让浏览器窗口打开好几天。)

在这种情况下,每次他们登录时点击页面,您都会更新数据库中的lastActivity。然后检查lastActivity >= now() - x 分钟。如果没有,那么您将其注销。当他们尝试登录时,您必须执行相同的操作。如果 lastActivity >= now() - x 分钟,您就告诉他们无法登录。

(您可以依赖 PHP session ,但我必须承认我在配置这些 session 方面没有足够的经验来推荐任何内容。我寻找一个在 session 过期时插入的处理程序,但我没有找到任何东西这看起来很简单,可能是因为 session 可能会在下次调用 PHP 页面前几天过期。)

关于php - 避免用户在不同的浏览器或系统中登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14037071/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com