为什么总提示我异地登陆

博客提醒用户sys_32账号于2019年7月3日和11日分别在云南曲靖和中国台湾高雄市异常登录,若非本人操作需及时修改密码。用户还提及密码有几个朋友知晓且有下载积分,怀疑IP发生变化。

亲爱的用户sys_32:你好! 你的账号于2019-07-11 13:01:27在中国台湾高雄市登录,登录IP为:59.127.168.43。若非本人登录,请及时修改密码,立即修改密码

亲爱的用户sys_32:你好! 你的账号于2019-07-03 12:25:45在中国云南曲靖登录,登录IP为:182.244.157.249。若非本人登录,请及时修改密码,立即修改密码

 

也没有别人用我积分下载,或者用我帐号评论的内容,难道我的IP在发生变化?我的csdn密码好几个朋友都知道,有下载积分。

登录顶出时提示异地登录可采用以下几种实现方法: ### 基于Session的实现 在用户登录成功后,记录用户的登录信息(如IP地址、设备信息等),并将当前用户的会话信息存储在一个全局的Map容器中。每次用户登录时,检查Map容器中是否已经存在该用户的会话信息。如果存在,则销毁之前的会话,并更新Map容器中的会话信息。当检测到异地登录时,通过前端页面提示用户当前账号在其他地方登录。以下是Java代码示例: ```java import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpSession; public class LoginController { private final Map<String, HttpSession> sessionMap = new HashMap<>(); public String userLogin(User user, HttpSession session) { // 用户登录逻辑 User login = userService.login(user); if (login == null || !user.getPwd().equals(login.getPwd())) { return "用户名或密码错误"; } // 检查是否已经登录 if (sessionMap.containsKey(login.getUserId().toString())) { // 销毁之前的会话 sessionMap.get(login.getUserId().toString()).invalidate(); sessionMap.remove(login.getUserId().toString()); // 这里可以添加前端提示逻辑,例如使用JavaScript弹窗提示 // 示例:在前端页面通过AJAX返回特定状态码,前端根据状态码显示提示框 } // 存储新的会话信息 session.setMaxInactiveInterval(30 * 60); session.setAttribute("user", login); sessionMap.put(login.getUserId().toString(), session); return "登录成功"; } } ``` ### PHP实现 在PHP的`__construct`构造方法中,除了验证用户登录状态是否被锁定等,还要取出本地`session_id`和存放在`admin`表中的`session_id`进行比对。如果对不上,表明账号异地登录,此时可以迫使强制下线,退回到登录页面,并在前端提示用户。以下是PHP代码示例: ```php class LoginVerification { public function __construct() { // 验证用户登录状态是否被锁定等逻辑 // ... // 取出本地session_id $localSessionId = session_id(); // 从admin表中取出存储的session_id $storedSessionId = $this->getStoredSessionIdFromAdminTable(); if ($localSessionId !== $storedSessionId) { // 强制下线,退回到登录页面 session_destroy(); header("Location: login.php"); // 可以在登录页面添加提示信息,告知用户有异地登录 } } private function getStoredSessionIdFromAdminTable() { // 从数据库中获取存储的session_id逻辑 // ... return $storedSessionId; } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值