关于避免多线程浏览器共用Session的思路
昨天碰到一个问题.以前都没有注意到的问题.就是多线程浏览器,只要不关闭浏览器,每个标签不管你如何更换登录用户共用的都是一个Session,这个和Session产生的机制有关,具体的不多说了.主要的是,我们为什么会碰到问题,在系统的应用过程中,某个企业个人肯定存在一个人担当多个角色的问题,那么进行重复的登录就是平常的事情了,比如说:我用角色A,填表单,然后提交给角色B,然后我再登录角色B处理这个表单,然后提交回去给A.这个时候如果切换到刚才A的标签进行处理就发现实际上系统确定角色是B.
有些人说了他们的解决方案:1 重申新登录用户必须新开一个浏览器. 2 通过Session是否存在,禁止多用户同一浏览器重复登录..其实这些解决的方法都是下下策.方法1太麻烦,我们做系统,就要把客户想象成那种非常白纸,什么都没有的,非常懒的,不愿意多步操作的人一样.你不能指望客户和我们一样的有耐心. 方法2.在企业里面个人担当多个角色的情况肯定存在,多用户登录无法避免,我们总不能操作一个,就要登录一次.一个工作流下来的几个审批...你要登录多少次??.因此,我们需要一个解决的方法.
我个人推荐的方法是,把用户的ID带入页面级.具体的解决方法我觉得有:
1 通过URL传递用户ID.这个用户ID一直跟著用户操作的每个页面.我们取值的时候,可以通过Session["+Request["用户ID"].toString()+"]--来区分每个不同的Session.在页面处理的时候,通过URL传递的用户ID,来取不同的Session变量.
2 通过页面的隐藏的input来传递用户ID.同样可以通过Session["+Request["用户ID"].toString()+"]--来区分每个不同的Session.在页面处理的时候,通过URL传递的用户ID,来取不同的Session变量.
3 通过保存页面的状态视图来获取用户的ID.
有些人说,可以通过cookies来解决.我到现在还没想好cookies怎么解决这个问题.因为cookies的产生机制和Session一样的.cookies一样存在共用问题.你虽然可以读取所有的COOKIES,但是你不知道哪个cookies才是和当前页面所属操作人员对应.
最后,建议通过URL或者隐藏input来传递的变量,要进行加密,加强安全性.

浙公网安备 33010602011771号