同一浏览器、同一域、同一时间、多个页面选项卡共用同一session,区分不同页面选项卡的解决方法

    在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呗。


    当然,这只是权宜之计,也望指教。



  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值