用户会话跟踪机制(session+cookie)
最近在优化之前给学校写的一个项目,发现了同一个浏览器(IE,Firefox)开多个选项卡的时候不能登录多个用户,后一个登录用户会把前一个用户给覆盖了,我的登录逻辑是把user对象存放到session中的,究竟为什么呢?经过各种debug,查看浏览器的网络请求信息,终于发现了其中的问题。
首先,先说明下服务器中session的机制,因为http协议不同tcp,客户端不是与服务端建立一个长连接的,所以客户端与服务端要建立一一对应的关系只能使用另一种机制,session+cookie实现会话跟踪,禁用cookie的情况暂时不讨论。在客户端没有禁用cookie的情况下,每次向后台服务器发出请求,都会发送cookie中的jsesessionid,而服务端是根据这个jsessionid的值来进行服务端检索到该session的。

上面可以看到,请求头中包括了一个cookie,那么这个cookie的jsessionid究竟对应的是不是服务器中session的id?下面我们来看看服务器中的session对应的id究竟是多少。下图是服务端中session的id。

经过比对,可以确定请求中的jsessionid对应的就是服务器该session对应的id,接下来,继续开另外一个选项卡进行服务器的访问,查看两个选项卡登录不同的用户时候的情况。

我发现,另外一个选项卡的请求头中的cookie和第一个的是一样的,经过后台查看,他们对应的sessionid也是一致的,那么用户覆盖的问题就应该出现在这里了,同一个浏览器访问同一个网站,他们是根据客户机的cookie来追踪在服务器中的会话的,如果多个用户使用session.setAttribute("user", user);方法来存储当前的登录的用户信息,那么后面的登录用户肯定会将前面的用户覆盖。这个问题我查看了一下京东究竟是怎么实现同一个浏览器登录多个用户的,发现他们一个浏览器只能登录一个用户,想登录另外一个用户必须把当前用户退出才能进行另一个用户的登录。
经过短暂的思考我也实现了类似的功能,首先登录的时候我先查找session中的user是否存在,如果存在,则直接跳转到登录成功的页面,否则再进行数据库中的用户的查找,这样子,只要在session没有失效的情况下,同一时刻就只能登录一个用户,要登录另一个用户就只能退出当前用户或者开不同的浏览器进程来登录,因为同一类型的浏览器读取的cookie还是一样的。
用户会话跟踪机制(session+cookie)的更多相关文章
- 浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决的方法
当浏览器禁用Cookies时.基于Cookie的会话跟踪机制就会失效.解决的方法是利用URL重写机制跟踪用户会话. 在使用URL重写机制的时候须要注意.为了保证会话跟踪的正确性,全部的链接和重定向语句 ...
- JSP基础--会话跟踪技术、cookie、session
会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...
- 会话跟踪技术——Session
一.什么是Session Session从用户访问页面开始,到断开与网站连接为止,形成一个会话的生命周期.在会话期间,分配客户唯一的一个SessionID,用来标识当前用户,与其他用户进行区分. Se ...
- 会话跟踪之Session
Session是服务端使用记录客户端状态的一种机制,Session使用简单,但是和Cookie相比,增加了服务器的存储压力[因为为了追求速度,服务器将Session放置在了内存中].Cookie是保存 ...
- 2018.8.18 servlet使用的会话跟踪除session外还有哪些方式
解释HTTP HTTP是一种无连接的协议,如果一个客户端只是单纯地请求一个文件(HTML或GIF),服务器端可以响应给客户端,并不需要知道一连串的请求是否来自于相同的客户端,而且也不需要担心客户端是否 ...
- (九)会话跟踪技术之Cookie
--部分摘自孤傲苍狼博客~ 一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再 ...
- 关于用户登录状态存session,cookie还是数据库或者memcache的优劣
session中保存登陆状态: 优:整个应用可以从session中获取用户信息,并且查询时很方便.在session中保存用户信息是不可缺少的(web应用中) 缺:session中不宜保存大量信息,会增 ...
- 会话技术(session/cookie)
session可保存int double bool array string object:cookie只能保存stringsession 可通过php.ini文件查看存放的位置:cookie不同浏览 ...
- 会话跟踪技术之——cookie
1.cookieForm <%@ page language="java" contentType="text/html; charset=UTF-8" ...
随机推荐
- MongoDB复制集高可用选举机制(三)
复制集高可用选举机制 在上一章介绍了MongoDB的架构,复制集的架构直接影响着故障切换时的结果.为了能够有效的故障切换,请确保至少有一个节点能够顺利升职为主节点.保证在拥有核心业务系统的数据中心中拥 ...
- MSD3393/MSD3463 屏参及REG对照表
概述:TIMMING组成 MOD: BANK:0x1032 VOP: SC_BK10 注意BANK对应: VOP: SC_BK10 例如:MS_U16 m_wPanelHTotal; Sub VO ...
- Jasper:API / 后向兼容性
ylbtech-Jasper:API / 后向兼容性 1.返回顶部 1. 后向兼容性 为了给客户提供创新的业务解决方案,Cisco Jasper 会定期扩展我们 API 框架的功能.我们会尽最大努力确 ...
- org.dom4j.DocumentException: null Nested exception: null解决方法
由于最近在学习使用spring架构,经常会遇到与xml文档打交道,今天遇到了此问题,特来分享一下解决方案. 出错原因: 很明显是因为找不到文件路径.这个原因是因为我使用了*.clas.getResou ...
- java中有关socket通信的学习笔记
最近做的项目中使用到了一些基于java的socket长连接的一些功能,用来穿透有关行业的网闸.用到了也就学习了一下,下面是对学习内容的一个笔记,记录一下也希望有兴趣的同学可以参考一下,加深对javas ...
- B - Sea and Islands
Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description A map ...
- 单例模式-Lazy initialization holder class模式
这个模式综合使用了Java的类级内部类和多线程缺省同步锁的知识,很巧妙地同时实现了延迟加载和线程安全. 1.相应的基础知识 什么是类级内部类? 简单点说,类级内部类指的是,有static修饰的成员式内 ...
- 微信小程序开发之修改和获取变量的值
在小程序开发过程中有两种变量,一种是定义在app,js里面的globalData定义的全局变量,另一种是在各个页面app,data里面的定义的变量. 一:全局变量的定义,获取值,赋值,修改 app.j ...
- 继承映射关系 joinedsubclass的查询
会出现下面这样的错一般是配置文件中的mapping和映射文件中的package路径或者class中的name路径不一致 org.hibernate.MappingException: Unknown ...
- MyEclipse10.0安装SVN的三种方法
最简单的一种: 首先下载zip包(svn:http://subclipse.tigris.org) 1.直接在MyEclipse10安装目录下的dropins文件夹下新建一个svn文件夹 2.把解压出 ...