B/S结构系统中使用Session遇到的问题
2007-10-17 18:08
260 查看
情景描述:在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之是否记录了登录用户,如果记录了,就判断一下是新登录的用户,若不是则抛出提示。
问题来了:若某个具有特殊页面权限的用户在录入完他的报表时,(注意:还未点“保存”哩)此时使用Ctrl+N打开一个新窗口,并用另外一个权限级别较低却只能查看该报表页面的身份登录进系统。此时原先的窗口对应的Session已经发生了变化,Session中记录的已经是新的用户了。现在我们回到最初的那个报表窗口,点击“保存”,显示操作成功。一切都ok了,没抛出异常啊,是这样的吗?
原来如此:我们再看一下数据库,刚才录入的报表中UserID是什么,对了,是一个并没有报表录入权限的用户ID。这么会这样哩?当然是Session共享的原因了。如何解决呢?
方法一:在每次点击保存动作时都判断一下该用户是否有权限。(那要改多少地方啊!!!)
方法二:只让我们的系统中出现一个IE的窗口。(似乎太霸道了点.....似乎也不怎么好实现。)
方法三:禁用Ctrl+N不就好了,这个方法不错,用几行javascript就可以搞定。(不过IE菜单上有个文件->新建->窗口一样可以打开新窗口)
难道真没方法了吗?
我们发现问题发生在不该改写Session时写了新的Session值,在用户登录时,一旦ValidateUser成功,写Session就发生了,所以我们可以在ValidateUser之前做点手脚了。在ValidateUser之前,我们看看Session之是否记录了登录用户,如果记录了,就判断一下是新登录的用户,若不是则抛出提示。
相关文章推荐
- node建立博客系统遇到的问题,1,乱码。2,multer的使用错误。3使用session问题
- linux_mint系统使用时遇到的问题
- linux系统安装hadoop-1.2.1遇到的问题【linux本机上的主机名和域名问题、不可以使用默认的localhost;完全没有启动】
- 使用wildfly-10.1.0遇到一个问题:启动时提示“系统找不到指定的文件”
- 关于Android7.0系统使用webview遇到的一个问题(二级跳转后界面空白)
- 一般处理文件.ashx中使用文件session遇到的问题
- 在使用系统自带的地图遇到的问题
- linux系统安装和使用SVN经验和遇到的问题
- linux系统使用中遇到的问题
- 如果在一个B/S结构的系统中需要传递变量值,但是又不能使用Session、Cookie、Application,您有几种方法进行处理?
- 使用busybox-1.9.2制作CRAMFS问题系统过程中遇到的问题及解决的办法
- 重装系统后使用java遇到的一些小问题
- 关于在使用UBUNTU系统中遇到的一些问题
- [置顶] 【办公采购系统】系统中遇到的问题汇总(三)——DropDownList控件使用总结
- 关于2.3系统使用FrameLayout遇到的一个问题
- linux系统安装时和使用时遇到的问题
- 使用AjaxPro与Session交互时遇到一个问题
- 关于Session生命周期和使用HttpSessionListener中遇到的问题
- Ubuntu下安装和使用OpenNMT翻译以及其中系统中遇到的问题
- 使用Access存储Session,遇到了SessionId问题?