出于信息安全的考虑,希望给每个能进入系统的人员一个账户,而不是所有人共用一个账户,并且一个账户同时只能一人登陆。刚开始的做法是登陆加锁,当用户登陆之后,对此用户进行标记,若此用户未下线状态下进行第二次登陆尝试,则禁止其登陆。这样做就解决了单账户多用户同时登陆的问题,但是实际操作中,却遇到了更大的问题:用户登陆过程中对其进行了加锁,则用户离开时就必须要进行解锁操作,而很多用户离开网站的习惯是直接点击浏览器的关闭按钮,这就导致无法解锁,最终导致用户正常登陆也受到限制。

那么如何友好的限制用户账户登陆的呢?我们首先分析一下PHP是如何识别用户是否登陆的。由于HTTP协议无状态性的特点,我们无法通过它对用户进行识别。一般来说,对用户的识别主要通过cookie或session,它们之前最大的不同是cookie数据由客户端存储,每次向服务端发送请求时,客户端把有效的cookie随请求发送到服务端,而session数据由服务端存储,服务端可以根据客户端发送的特定cookie值来判定这些请求是否属于同一请求。我们这样对用户进行登陆检测:public function login(Request $request)

{

$dl = $request ->input('dl','');

$password = $request -> input('password','');

if($dl == ''){

return redirect('/')->with('danger','登录帐号或密码错误!');

}

if($password == ''){

return redirect('/')->with('danger','登录帐号或密码错误!');

}

$userinfo = User::where('dl',$dl)->first();

// 判断用户帐号是否存在

if(empty($userinfo)){

return redirect('/')->with('danger','您输入的帐号不存在!');

}

// 判断密码是否正确

if(md5($password) != $userinfo['password']){

return redirect('/')->with('danger','登录帐号或密码错误!');

}

return redirect('/userinfo');

}

显而易见,上面的代码并不能实现我们想要的效果。想要达到我们想要的效果,我们只需要在上面代码基础上,再加一层session_id的验证就可以了。用户在登录时储本次会话的session id,当用户再次登录时,首先删除之前用户的session id,再把本次登陆的session id保存起来,这样一来,原来的用户就会被新用户挤下线。public function login(Request $request)

{

$dl = $request ->input('dl','');

$password = $request -> input('password','');

if($dl == ''){

return redirect('/')->with('danger','登录帐号或密码错误!');

}

if($password == ''){

return redirect('/')->with('danger','登录帐号或密码错误!');

}

$userinfo = User::where('dl',$dl)->first();

// 判断用户帐号是否存在

if(empty($userinfo)){

return redirect('/')->with('danger','您输入的帐号不存在!');

}

// 判断密码是否正确

if(md5($password) != $userinfo['password']){

return redirect('/')->with('danger','登录帐号或密码错误!');

}

//用户登陆限制

$session_id = Session::getId();

if($userinfo['session_id'] != $session_id){

//  session_id 其实就是 session 文件名,当然我是以 Laravel 框架为例,不同框架可能不一样。

empty($userinfo['session_id']) ? '' : unlink(storage_path().'/framework/sessions/'.$userinfo['session_id']) ;

Cache::put('login_error', '您的帐号在异地登录,非本人操作请及时修改密码。', 3);

User::where('uid',$userinfo['uid'])->update(['session_id'=>$session_id]);

}

return redirect('/userinfo');

}

php sessionid 重复,php_ session_id 限制同一用户同时登录相关推荐

  1. 查看登录oracle信息,记录Oracle用户的登录信息

    为了统计哪些用户在登录使用数据库,以及其他用途,需要记录登录数据库的信息,以及尝试登录数据库失败的信息,以下几个trigger可 为了统计哪些用户在登录使用数据库,以及其他用途,需要记录登录数据库的信 ...

  2. 一个用户只能登录一次

    仅仅思路,这是springsecurety的 package com.dbapp.fly.config.security;import java.io.IOException; import java ...

  3. 用户唯一登录,最新登录挤掉以前的登录,实现踢人.

    最近在做一个功能,要求是这样的:相同的账号,例如admin账号,在A电脑登录成功,然后admin账号在B电脑登录,系统发现admin账号出现了重复登录,A电脑上登录的admin账号就会被退出登录. 流 ...

  4. 统一用户单点登录系统

    see also:http://www.ibmtech.com.cn/dandian.html 统一用户单点登录的基本原理 一般来说,每个应用系统都拥有独立的用户信息管理功能,用户信息的格式.命名与存 ...

  5. 限制域用户多点登录--脚本

    在51上看到一篇不错的博文,转载下备以后工作中使用.有机会做一个实验,一并上传博文. 文章出自:http://chongerfei.blog.51cto.com         在微软的AD域中,任何 ...

  6. asp.net mvc 自定义全局过滤器 验证用户是否登录

    一般具有用户模块的系统都需要对用户是否登录进行验证,如果用户登录了就可以继续操作,否则退回用户的登录页面 对于这样的需求我们可以通过自定义一个独立的方法来完成验证的操作,但是这样代码的重复率就大大提高 ...

  7. 同一用户最新登录踢掉历史登录【原创】

    前一段在开发一个项目中,需求人员希望能防止同一个用户在同一时间多次登录系统.于是在我们博客园里搜索相关文章,发现解决方案几乎都是千篇一律.见 防止用户多次登录 这种方案个人觉得有两点不足之处: 1.频 ...

  8. php做异地登录验证,PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】

    本文实例讲述了PHP实现用户异地登录提醒功能的方法.分享给大家供大家参考,具体如下: 对于安全性要求比较高的web网站,特别是后台管理,有时候需要甄别自己的账号是否被盗或者是否有另一个人此刻登陆了在进 ...

  9. Cookie (设置与读取、超时设置、指定路径、显示用户上次登录时间)

    Cooike简介 Cookie 是在 HTTP 协议下,服务器或脚本可以维护客户工作站上信息的一种方式.Cookie 是由 Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的 ...

最新文章

  1. “.Net 社区虚拟大会”(dotnetConf) 2016 Day 3 Keynote: Scott Hanselman
  2. 题目1102:最小面积子矩阵
  3. 视图插入数据_数据库DQL、DML、DDL、DCL 详解
  4. 3个Python面试回答的技巧,助你面试大大加分
  5. ZeroMQ全面介绍
  6. 微型计算机各部件之间通过总线传递各种信息,2015年9月计算机一级考试基础及MSOffice应用选择真题...
  7. 面向对象的接口思想与函数式编程
  8. link怎么打开 vs2015_VS2015工程转VS2010
  9. 菜鸟学开店—最简收银POS系统
  10. Entity Framework 6+ 连接Mysql
  11. VC 实现程序只运行一个实例,并激活已运行的程序
  12. 有哪些好用的低代码开发平台?
  13. 周易版化学元素周期表
  14. leetcode之动态规划刷题总结1(Java)
  15. 计算机资源管理器总是未响应,资源管理器总是无响应,而且开机很慢老是解决不了问题...
  16. 如何判断是否被职场PUA探针及处理
  17. 商标注册查询入口官网在国家知识产权局商标局查询
  18. 服务器装系统步骤图解win7,win7 硬盘重装系统步骤图解|win7系统硬盘重装教程
  19. textarea剩余可输入字数
  20. 为了搞清深度学习的随机梯度下降我复习了下微积分

热门文章

  1. jvm回收垃圾_没有垃圾回收的JVM
  2. 工程模式和抽象工厂模式_功能工厂模式
  3. javafx 剪切板_JavaFX技巧18:路径剪切
  4. es 安装kopf_Elasticsearch-kopf导览
  5. 使用Spring Boot 2.0的Spring Security:保护端点
  6. 邪恶的Java技巧使JVM忘记检查异常
  7. 免费网络研讨会:Java应用程序中的吞咽异常
  8. 选择Java加密算法第2部分–单密钥对称加密
  9. @Autowired和可选依赖项
  10. Devoxx的Red Hat Engineers提供了更多Java EE