目的:
同一个用户不能重复登录。
实现:
在Action里做check,如果当前session里面有既存的user,就在登录页面上返回错误信息。
现状:
1.登录时提交方式为Post。
2.登录用的actionForm已经在struts-config里面配置socpe="request"。
3.从登录页面登录成功后的页面使用了frameset。
环境: Java struts+tomcat,IE6~IE11
问题:
修改前,按F5刷新后,回到刚登录成功后的初始画面。
修改后,因为上面的check,按F5刷新后显示报错的登录页面。
为使刷新后不报错,我想到了以下两种解决方案。
1.禁用F5:
!!但是,画面得到焦点后,应该被禁用的F5又可以刷新了。。。
2.不禁用F5,通过判断画面是否刷新来进行控制:
在登录页面的form里加一个hidden项,从登录页面登录时给它赋值。
如果这个hidden项为空,则表明进行了刷新。
!!但是,事实上,从登录后任意一个页面点刷新后,登陆页面的表单内容(包括用户名,密码,hidden项)的值并没有被清空,还是保存着登陆成功时的值。
求助:
以下只要任意一个问题有解答就好。拜托各位大神!救救我这棵菜!T_T
1.为避免保存在session里的信息"串门",各位大神如果有更好的解决方案,务请不吝赐教!
2.画面得到焦点后,应该被禁用的F5又可以刷新了ーー这是为什么?有解决办法吗?
3.但事实上,从登录后任意一个界面点刷新后,登陆页面的表单内容(包括用户名,密码,hidden项)的值并没有被清空,还是保存着登陆成功时的值。ーー这是为什么?有解决办法吗?
虽然问题还没有完全解决,各位如果哪天有想法了,请再指教。
别闹了,一个浏览器就是一个会话,
一个会话只能有一个用户,一个窗口登录了.另外一个窗口再登录,整个会话就是另一个登录用户
你没明白 一个"会话"的含义
让大侠闹心了T_T,是的,我刚刚反应过来是这么回事,谢谢,我又涨姿势了……问题不在于两个不同的用户,而在于同一个用户可以打开两个窗口,最新打开的窗口里存入session的值会覆盖之前打开窗口时存入的值。再有不妥请继续指教~
另外,解决这种问题大侠有何高见?
@Keyirei: 这种没什么好解决.就是这样.不过你可以在登录时做一个判断,如果用户已登录,就要求先退出登录,后才能登录
一个会话就是标识一个client,而会话里登录的对象只是标识当前的client登录的用户而已.
@吴瑞祥: 嗯,谢谢^ω^!
现在已经加上了登录时的判断,可是登录完毕操作其它页面时,刷新页面,就又去执行登录的逻辑,这时因为会话里已经有登录对象,执行我加上的判断时会提出退出之后重新登录,回不到刷新前页面。为了解决这个,才有了上面的二三问……
1、首先Session串门,这不科学~
2、不知道你说的禁用F5是什么情况。
3、这个值有可能是浏览器帮你存的,这个你要确认好~
重新回复一次~
浏览器帮忙存是说存在cookie里吗?
@Keyirei: F5的话,会重新提交,这也是浏览器的。你需要跳转一次就能屏蔽这个了。
浏览器帮忙不一定是存在cookie里面的。chrome就经常干这事。
这个问题需要通过Cookie解决,而不是Session
具体一点是怎样实现呢?刷新时的问题能通过cookie解决吗?