B/S结构系统中使用Session遇到的问题

情景描述:在B/S结构的系统中很多人喜欢使用Session记录用户登录信息,页面关闭后Session自然也就消失了。使用起来确实方便省事。然而在浏览器中存在一个现象,使用Ctrl+N打开一个新页面时,这时Session发生共享,也就是说在新开的窗口中仍然可以获得旧窗口中使用的Session。难道这不对吗?有问题吗?
问题来了:若某个具有特殊页面权限的用户在录入完他的报表时,(注意:还未点“保存”哩)此时使用Ctrl+N打开一个新窗口,并用另外一个权限级别较低却只能查看该报表页面的身份登录进系统。此时原先的窗口对应的Session已经发生了变化,Session中记录的已经是新的用户了。现在我们回到最初的那个报表窗口,点击“保存”,显示操作成功。一切都ok了,没抛出异常啊,是这样的吗?
原来如此:我们再看一下数据库,刚才录入的报表中UserID是什么,对了,是一个并没有报表录入权限的用户ID。这么会这样哩?当然是Session共享的原因了。如何解决呢?
方法一:在每次点击保存动作时都判断一下该用户是否有权限。(那要改多少地方啊!!!)
方法二:只让我们的系统中出现一个IE的窗口。(似乎太霸道了点.....似乎也不怎么好实现。)
方法三:禁用Ctrl+N不就好了,这个方法不错,用几行javascript就可以搞定。(不过IE菜单上有个文件->新建->窗口一样可以打开新窗口)
难道真没方法了吗?
我们发现问题发生在不该改写Session时写了新的Session值,在用户登录时,一旦 ValidateUser成功,写Session就发生了,所以我们可以在 ValidateUser之前做点手脚了。在 ValidateUser之前,我们看看Session之是否记录了登录用户,如果记录了,就判断一下是新登录的用户,若不是则抛出提示。

转载于:https://www.cnblogs.com/Don/archive/2007/10/17/927951.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值