当前位置: 技术问答>java相关
Java的session问题!!!
来源: 互联网 发布时间:2015-01-14
本文导语: 请教大虾: 我用JAVA实现权限控制功能: 当一开始登录时让用户输入工号和密码,成功后用session在数据库处登记该登录信息, 当退出后,发送消息给服务器,表示该会话结束,下次进入须重新登录。 问题如...
请教大虾:
我用JAVA实现权限控制功能:
当一开始登录时让用户输入工号和密码,成功后用session在数据库处登记该登录信息,
当退出后,发送消息给服务器,表示该会话结束,下次进入须重新登录。
问题如下:当用户非法退出后(直接关掉浏览器),我怎么知道此次会话结束并记录已退出信息呢?否则如果不记录,服务器可能一直保持会话连接状态。
请帮帮忙,一点小分,不成敬意!先谢谢了!
我用JAVA实现权限控制功能:
当一开始登录时让用户输入工号和密码,成功后用session在数据库处登记该登录信息,
当退出后,发送消息给服务器,表示该会话结束,下次进入须重新登录。
问题如下:当用户非法退出后(直接关掉浏览器),我怎么知道此次会话结束并记录已退出信息呢?否则如果不记录,服务器可能一直保持会话连接状态。
请帮帮忙,一点小分,不成敬意!先谢谢了!
|
直接利用session就行了,服务器确实不能得知何时客户端结束了(例如:网络端了、客户关机、客户关闭浏览器、等等)。但是能保证下次(重开浏览器,注意与刷新不同,刷新仍在原来的session范围内)打开页面的时候一定是个新的session,换句话说:就是用户必须重新输入“工号和密码”,才能浏览特定页面。下面是个简单的例子:(JBuilder5做的)Jsp1.jsp和Jsp2.jsp
---------------------Jsp1.jsp------------------
Jsp1
JBuilder Generated JSP
Enter new value :
------------------Jsp2.jsp------------------------
Jsp2
JBuilder Generated JSP
---------------------------end of code-----------------
启动tomcat后,注意如果直接浏览jsp2是不允许的,
当先进入jsp1然后submit进入jsp2,第一次会提示session为空,以后就会显示第一次在jsp1里面输入的内容(包括刷新jsp2),但如果关闭该浏览器,再要直接浏览jsp2还是不允许的。显然此时session没有超时,说明这必定是一个新的session.
---------------------Jsp1.jsp------------------
Jsp1
JBuilder Generated JSP
Enter new value :
------------------Jsp2.jsp------------------------
Jsp2
JBuilder Generated JSP
---------------------------end of code-----------------
启动tomcat后,注意如果直接浏览jsp2是不允许的,
当先进入jsp1然后submit进入jsp2,第一次会提示session为空,以后就会显示第一次在jsp1里面输入的内容(包括刷新jsp2),但如果关闭该浏览器,再要直接浏览jsp2还是不允许的。显然此时session没有超时,说明这必定是一个新的session.
|
当用户关闭浏览器后,服务器端保留SESSION直到SESSION超时,但本地的SESSION就没有了。
若用户再想开浏览器进入的话,SESSION里肯定没有登陆信息。
若用户再想开浏览器进入的话,SESSION里肯定没有登陆信息。
|
hehe.其实简单,当用户关掉浏览器的时候,javascript里面有个onUpload的事件被激发,你通过这个事件的处理器就可以调用相应的jsp/servlet,做你想做的事情了。。
|
to hawk_js(鹰): session 时间根据需要而定。但如果你想要关掉浏览器后
立即退出,那这样恐怕不行。而要采用在javaScript中写unload的方法。
但那样会很麻烦,因为每个文件中都要写unload方法。
最终采用什麽方法,还是要看客户的要求如何。
立即退出,那这样恐怕不行。而要采用在javaScript中写unload的方法。
但那样会很麻烦,因为每个文件中都要写unload方法。
最终采用什麽方法,还是要看客户的要求如何。
|
faint
页面关掉的时候,session自然就丢失了,客户下次进来是必须要登陆的!
服务器端的session是有失效时间的,不用设置的过短,要不然客户需要不停的重新登陆
万一用户在你设定的时间到来之前关掉浏览器,然后又直接进入(不登录),并且
仍然未到过期时间,怎么办? ~~~~~~~~~~~~~~~~~~~~~~~~不可能!!
那你就删掉服务器端上次的登陆信息,重新作一次登陆!
页面关掉的时候,session自然就丢失了,客户下次进来是必须要登陆的!
服务器端的session是有失效时间的,不用设置的过短,要不然客户需要不停的重新登陆
万一用户在你设定的时间到来之前关掉浏览器,然后又直接进入(不登录),并且
仍然未到过期时间,怎么办? ~~~~~~~~~~~~~~~~~~~~~~~~不可能!!
那你就删掉服务器端上次的登陆信息,重新作一次登陆!
|
to hawk_js(鹰): 如果你愿意在每个一页面都判断session有无的话,那通过session
就可意解决。
还有一种办法:
if (httpHeader.reference = "") /* 手入力URL */
{
/* forbidden, go to login page */
}else { /* 由别的画面迁移而来 */
/* ok */
}
就可意解决。
还有一种办法:
if (httpHeader.reference = "") /* 手入力URL */
{
/* forbidden, go to login page */
}else { /* 由别的画面迁移而来 */
/* ok */
}
|
to hawk_js(鹰): 如果你愿意在每个一页面都判断session有无的话,那通过session
就可意解决。
还有一种办法:
if (httpHeader.reference = "") /* 手入力URL */
{
/* forbidden, go to login page */
}else { /* 由别的画面迁移而来 */
/* ok */
}
就可意解决。
还有一种办法:
if (httpHeader.reference = "") /* 手入力URL */
{
/* forbidden, go to login page */
}else { /* 由别的画面迁移而来 */
/* ok */
}
|
设定session过期时间。
addSessionListener(),session过期回自动调用此函数,
在其中进行logout.
addSessionListener(),session过期回自动调用此函数,
在其中进行logout.
|
你可以在你的jsq页面的头几行加入一段验证程序,判断在session中是否有一个特定的信息,如果没有提示出错,就可以了
|
我觉得beyondii的办法,可行,因为如果当前页关掉以后Session会消失的。
|
也是用session了,呵呵
|
利用HttpSessionListener编写自己的监听器,如果浏览器被非法关闭,Session被去掉,将会调用你的监听器,你可以在监听器的ValueBound()和ValueUnBound()方法中处理相应的事件。可以看看Servlet规范,里面有描述。