同一浏览器、同一域、同一时间、多个页面选项卡共用同一session,区分不同页面选项卡的解决方法
2017-06-16 02:36
323 查看
在web开发中,session机制常常用于区分用户身份,但session也有无能为力之处,设想一个情形:
【多个用户】分别使用【不同选项卡页面】在【同一会话时间】公用【同一】浏览器,【登录同一应用】,此时服务端使用session将【无法区分】不同选项卡页面。
注意,是同一电脑的同一浏览器不是不同浏览器。
这个情形可能存在吗?当然可能,比如一个多用户web saas应用,有两个用户A和B,有一天B求助A,要求A参照A自己的应用设置为B进行配置,在这种情况下那么A很有可能在同一浏览器同一时间下同时登陆A自己的帐号(用于参考)和B的帐号(用于配置)。此时服务端如果不区分不同选项卡,那么A和B可能就没办法同时登录,要么A和B的session可能会混一起出错。
当然,现实的情况可能远比这个多。
本人暂未了解到像session机制一样系统、全局、环境级的解决区分不同浏览器客户的,能够区分选项卡方法,但有个人的一些观点思路:
要解决这个问题,就要让服务端区分不同的选项卡页面。
先想
1对于cookie是否不同选项卡的都会同样带回呢?好像真的是机械的全部带回不区分不同选项卡。
2同一浏览器不同页面向同一域发请求时是否携带了这个选项卡的特别唯一的信息呢?个人看了半天网络协议监控,好像似乎没有。
3服务端是否能区分不同选项卡呢?考虑会不会浏览器端不同页面使用不同的客户端端口发送信息呢?如果是不同端口,那就能用端口号区分,然而好像似乎可能也不区分端口。
那就暂且这样解决:
【页面到客户端后,不同选项卡页面生成固定唯一的识别符每次带回服务器】
不同页面同一时间可以通过js的Math.random动态生成一个随机字符串不同的识别符,虽然Math.random是伪随机,两页面撞一起的可能性还是比较小的(当然还有其他方法)。
暂将这个识别符叫做tabUID,生成tabUID后,给页面的ajax、jsonp等通信基础类添加这个固定的tabUID,要求每次把这个tabUID带回服务端。服务端的程序用session时首先就要依据tabUID在session中选择不同的用户数据session进行处理,比如$_SESSION['tabUID']['SESSION']。叫它子session或者tab
session呗。
当然,这只是权宜之计,也望指教。
【多个用户】分别使用【不同选项卡页面】在【同一会话时间】公用【同一】浏览器,【登录同一应用】,此时服务端使用session将【无法区分】不同选项卡页面。
注意,是同一电脑的同一浏览器不是不同浏览器。
这个情形可能存在吗?当然可能,比如一个多用户web saas应用,有两个用户A和B,有一天B求助A,要求A参照A自己的应用设置为B进行配置,在这种情况下那么A很有可能在同一浏览器同一时间下同时登陆A自己的帐号(用于参考)和B的帐号(用于配置)。此时服务端如果不区分不同选项卡,那么A和B可能就没办法同时登录,要么A和B的session可能会混一起出错。
当然,现实的情况可能远比这个多。
本人暂未了解到像session机制一样系统、全局、环境级的解决区分不同浏览器客户的,能够区分选项卡方法,但有个人的一些观点思路:
要解决这个问题,就要让服务端区分不同的选项卡页面。
先想
1对于cookie是否不同选项卡的都会同样带回呢?好像真的是机械的全部带回不区分不同选项卡。
2同一浏览器不同页面向同一域发请求时是否携带了这个选项卡的特别唯一的信息呢?个人看了半天网络协议监控,好像似乎没有。
3服务端是否能区分不同选项卡呢?考虑会不会浏览器端不同页面使用不同的客户端端口发送信息呢?如果是不同端口,那就能用端口号区分,然而好像似乎可能也不区分端口。
那就暂且这样解决:
【页面到客户端后,不同选项卡页面生成固定唯一的识别符每次带回服务器】
不同页面同一时间可以通过js的Math.random动态生成一个随机字符串不同的识别符,虽然Math.random是伪随机,两页面撞一起的可能性还是比较小的(当然还有其他方法)。
暂将这个识别符叫做tabUID,生成tabUID后,给页面的ajax、jsonp等通信基础类添加这个固定的tabUID,要求每次把这个tabUID带回服务端。服务端的程序用session时首先就要依据tabUID在session中选择不同的用户数据session进行处理,比如$_SESSION['tabUID']['SESSION']。叫它子session或者tab
session呗。
当然,这只是权宜之计,也望指教。
相关文章推荐
- 解决页面的Session.SessionID不同的问题
- session时间很短 解决方法
- 在获取前台传送过来的中文时,往往会出现乱乱码.而针对不同的浏览器,解决方法不同.
- HTML页面中input元素在android浏览器中获得焦点后页面放大解决方法
- 浏览器窗口放大缩小后页面内容居中解决方法
- defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
- C#WinForm页面传值解决方法(仿web中Session)
- defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
- 区分不同浏览器的方法
- 一个服务器搭多个tomcat导致session丢失,或者同一个IP不同端口,多个应用的session会冲突解决方法
- 关于html中charset与<title>位置不同页面空白的问题及解决方法
- 解决回车弹出新页面及弹新页面时被浏览器拦截window.open方法
- 使用CInternetSession获取utf-8页面中文乱码问题解决方法
- defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
- C#WinForm页面传值解决方法(仿web中Session)
- 不同浏览器计算页面高度的不同方法
- 页面内容不能铺满浏览器窗口的解决方法
- 同浏览器 不同窗口 共享session 解决
- 使用CInternetSession获取utf-8页面中文乱码问题解决方法
- Jsp中解决session过期跳转到登陆页面并跳出iframe框架的方法