.net中,session的问题 10
为了解决同一浏览器多用户登录导致session被覆盖的问题,用时间(精确到毫秒)作为session[Time],time的值。但其他页面又无法获取这个time的值,请问要...
为了解决同一浏览器多用户登录导致session被覆盖的问题,用时间(精确到毫秒)作为session[Time],time的值。但其他页面又无法获取这个time的值,请问要如何解决呢。
展开
展开全部
这个吧除了Session被覆盖的问题还存在一个CSRF的问题。
先说一下原因,如果你本机不支持或不启用cookie时,并非不存在cookie,而是将cookie保存在了浏览器进程内——cookie中有一个重要的值叫sessionId(java中使用的是JSSessionId,Php中使用的是PHPSession),这个值即便是保存,也不会保存到cookie本地缓存中(所谓支持或启用cookie仅是本身是否可以写浏览器中的cookie保存存到本地缓存中而已)。这个本来没有问题,问题在于浏览器多选项页的出现,一个浏览器中存在多个选项页就存在了CSRF(网页交叉攻击)。原因就是多个浏览器选项页在一个浏览器进程中。
这里重要的原因就是浏览器进程选项区并不一一对应,为了提高性能,其实存不几个不同的选项页在同一个浏览器进程中。那么是不是再打一个浏览器就是不同进程了呢?也不是!浏览器进程与浏览器及选项页基本上是无序关系,比如在浏览器中打开了七八个选项区,会看到在任务管理器中存两个浏览器进程(win7以后除了一个主进程外存在的其他进程相当于以前的浏览器进程概念)。如果打一个浏览器只有一个选项页,再击打开个浏览器是不是两个在不同的浏览器进程中呢——也不一定,往往是在一个进程中(这和选项页直接拖出,变成一个浏览器是没有区别的)。所以浏览器进程与打开的区别基本上来说没有什么关系了,所以如果两个选项页或两个浏览器不同用户登陆时,使用同一个浏览器进程会使用相同的session!这也是为什么会存在CSRF,它就是结合了这种特性和跨域的特性形成的一种攻击手段。
当然,如果是两个不同的浏览器,不同的浏览器登陆不同的用户(如IE中登陆一个,360中登陆一个)就不会存在这样的问题。
所以大家都注意到这种情况,为了解决CSRF的问题,可以考虑使用token来防止交叉攻击,若是两个用户在同一浏览器下登陆,可以参考一下这个原理去实现。否则同一浏览器多用户登陆的情况基本上算是无解的(要么两个不同的浏览器或使用早期不支持选项页的浏览器)。
基本上来说,就是这样,最先浏览器设计时就没有考虑过同一浏览器上多用户登陆的问题,不过若是测试的情况下,有些测试工具可以使用不同的浏览器进程的(那玩意还要模拟不同的浏览器,所以不会存在这种CSRF的情况的)
先说一下原因,如果你本机不支持或不启用cookie时,并非不存在cookie,而是将cookie保存在了浏览器进程内——cookie中有一个重要的值叫sessionId(java中使用的是JSSessionId,Php中使用的是PHPSession),这个值即便是保存,也不会保存到cookie本地缓存中(所谓支持或启用cookie仅是本身是否可以写浏览器中的cookie保存存到本地缓存中而已)。这个本来没有问题,问题在于浏览器多选项页的出现,一个浏览器中存在多个选项页就存在了CSRF(网页交叉攻击)。原因就是多个浏览器选项页在一个浏览器进程中。
这里重要的原因就是浏览器进程选项区并不一一对应,为了提高性能,其实存不几个不同的选项页在同一个浏览器进程中。那么是不是再打一个浏览器就是不同进程了呢?也不是!浏览器进程与浏览器及选项页基本上是无序关系,比如在浏览器中打开了七八个选项区,会看到在任务管理器中存两个浏览器进程(win7以后除了一个主进程外存在的其他进程相当于以前的浏览器进程概念)。如果打一个浏览器只有一个选项页,再击打开个浏览器是不是两个在不同的浏览器进程中呢——也不一定,往往是在一个进程中(这和选项页直接拖出,变成一个浏览器是没有区别的)。所以浏览器进程与打开的区别基本上来说没有什么关系了,所以如果两个选项页或两个浏览器不同用户登陆时,使用同一个浏览器进程会使用相同的session!这也是为什么会存在CSRF,它就是结合了这种特性和跨域的特性形成的一种攻击手段。
当然,如果是两个不同的浏览器,不同的浏览器登陆不同的用户(如IE中登陆一个,360中登陆一个)就不会存在这样的问题。
所以大家都注意到这种情况,为了解决CSRF的问题,可以考虑使用token来防止交叉攻击,若是两个用户在同一浏览器下登陆,可以参考一下这个原理去实现。否则同一浏览器多用户登陆的情况基本上算是无解的(要么两个不同的浏览器或使用早期不支持选项页的浏览器)。
基本上来说,就是这样,最先浏览器设计时就没有考虑过同一浏览器上多用户登陆的问题,不过若是测试的情况下,有些测试工具可以使用不同的浏览器进程的(那玩意还要模拟不同的浏览器,所以不会存在这种CSRF的情况的)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询