java 怎么让同一浏览器登录多个用户但是不共用session?

我在登录自己写的网页时,分别注册两个用户然后登录,发现他们是共用session的。
请问这个要怎么解决?如何登录两个以上用户跳转到主页的时候又不相互影响?

今天测试了一下淘宝,可以同时登录两个又不相互影响。
请问怎么做到多个用户登录又不相互影响呢?

阅读 14.3k
5 个回答

使用cookie实现session的无解。
更新:
也不是无解,要将cookie的key与用户id关联起来。这样在服务端就要遍历一个cookie了。

也可以不使用cookie,自己将session保存在链接上或者Authorization中。
可以看看JWT。
这样可以同时登录多个用户,但是关闭浏览器以后,只能有一个用户能用。

session是服务器为每一个浏览器建立的会话对象,数量和实际业务用户没有关系,所以同一浏览器,多窗口登陆或者多用户的话,实际还是一个session.
1.开多个浏览器,或者360那种小号窗口,实际也是开了多个浏览器进程,分别与服务器链接,不过要注意cookie可能导致的session共享问题。
2.不依赖session,将相关信息通过请求进行传递,常见的每个用户登陆后分配一个临时标识(SID),所有的请求和响应均携带此标识,后台用来区分用户,实际就是将判断上移到应用层面。一边这个标识生成后会放到数据库表,设置一定的有效时间,当然也可以将标识以列表的形式放到session里面,然后后台通过session来匹配用户,原理一样。

题主,请问你的使用场景是什么?如果多用户debug的话,开多个浏览器是很正常的做法
session一定是共用的,无解
======== 以下是原答案 ========
chrome登录一个,firefox登录一个

没有处理过这个问题,但是我觉得应该是后台生成sessionid的时候进行了一定的处理,主要就是加载数据时候方便后台的处理吧,但是这样总觉得会出问题,还是尽量不要多个用户使用一个浏览器了吧

这个跟浏览器的实现和http协议的版本都是有关的
一方面,在同一个浏览器下,我们看http协议的版本,目前server使用的http协议都是1.1的,而1.1版本是支持长连接的,默认请求头中的keep-alive:true,这种情况下,建立在该链接上的所有请求都是使用的同一个session,这显然是不符合用户登录的场景
另一方面,从浏览器实现的角度考虑,目前很多浏览器都是多线程的实现方式,如果浏览器已经与远端服务器建立过连接,即使打开多个浏览器窗口,访问同一个uri,只要是通过一个浏览器就会共享会话信息,如cookie等。如果我记得没错的话,之前的ie6就是每个窗口单独建立会话连接,有条件的可以试下,不过这种方式已经被广大的浏览器厂商所放弃了。
像上述问题的描述,浏览器跟服务器的session维护就不能依靠浏览器来维护,而需要业务服务端来维护,可借鉴分布式集群session维护方案,使用分布式缓存的方式来实现;要么就是比较low的方式,通过多个浏览器来实现不同用户的登录

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏