jsp解决用户重复登陆。
正常退出的情况我会处理,就是当用户点击浏览器的关闭按钮时,怎么处理?如果用js来监视用户的关闭事件的话也有个问题,就是如果我当前用户登陆后开了两个网页,不能就关闭了一个窗口就让人家session失效吧 !怎么弄,请看清题目再回答!
高手,高手
正常退出的情况我会处理,就是当用户点击浏览器的关闭按钮时,怎么处理?如果用js来监视用户的关闭事件的话也有个问题,就是如果我当前用户登陆后开了两个网页,不能就关闭了一个窗口就让人家session失效吧 !怎么弄,请看清题目再回答!
高手,高手
解决方案 »
- struts2 jfreeChart 问题
- jsp页面的点击触发问题
- 关于servlet jar包
- 请教高级系统架构师,一般人员回答不了,Spring + Struts 整合的优点?
- tuxedo的问题,高手赠100分
- [TOMCAT]为什么webapps/examples/.../classes/下的servlet可以运行,自己webapps/myApp/../classes的却不行,烦闷!
- 谁有jasperreport开发的曲线图和饼图的例子?越简单越好.它提供的sample里没有:(
- 用weblogic服务器,在jbuilder中,如何单独建立一个servlet
- 大家作jsp和javabean程序,是怎么调试的?---做一个小调查!!!!来者有分!!!!
- 帮忙指点一下
- 求助 急!
- 第一个struts不成功,大家帮我看看出了啥问题
http://www.family168.com/tutorial/jsp/html/jsp-ch-08.html
1. session 有个侦听器 叫做:HttpSessionListener 它是一个接口,session,被创建和被销毁都是可以知道的。实力代码如下:
public class MyHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent httpsessionevent) {
//TODO do your business here
} public void sessionDestroyed(HttpSessionEvent httpsessionevent) {
//TODO do your business here
}
}2. session是有过期时间的,比如30分钟不活动,自动销毁。你可以自己设置3. 你可以在数据库里面建一张表online_user,保存在线登录的用户。接下来 怎么做,你懂的,这话咱不用说得太细。
var isIEc = getOs();
if(isIEc == "MSIE")
{
window.event.returnValue = "如果离开该页面,该页面的信息将会丢失。";
}else if(isIEc == "Firefox"){
event.returnValue = "如果离开该页面,该页面的信息将会丢失。";
}
}
window.onunload=function(){
// 执行退出工作:后台把用户信息删除,把session中信息清除
ExitAction();
}function getOs()
{
var OsObject = "";
if(navigator.userAgent.indexOf("MSIE")>0) {
return "MSIE";
}
if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){
return "Firefox";
}
if(isSafari=navigator.userAgent.indexOf("Safari")>0) {
return "Safari";
}
if(isCamino=navigator.userAgent.indexOf("Camino")>0){
return "Camino";
}
if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){
return "Gecko";
}
} function ExitAction() { var bigs = window.location.href;
var name = ((bigs.split("//"))[1].split("/"))[0];
url = "http://??????/????/ExitAction.do?";
createXmlHttpRequest();
var parameter = "noparameter";
///。发送等
var isIEc = getOs();
if(isIEc == "MSIE")
{
xmlhttp.open("post", url, true);
xmlhttp.setrequestheader("content-length", parameter.length);
xmlhttp.setrequestheader("cache-control", "no-cache");
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function(){};
xmlhttp.send(parameter);
}else if(isIEc == "Firefox"){
var ffurl = url + parameter;
xmlhttp.open("post", ffurl, false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.onload = function(){};
xmlhttp.send(null);
}
}
登陆时,就记录一条信息。此外还要用过滤器来检查该用户的状态(用户防止多点登陆)
如果发生意外,退出。 再次登陆时第一次时 提示 ”用户账号异常,被锁定,请重新登陆“ (此时修改下 isonlie的状态,其实就是T他下线)。 那么再次登陆就可以正常登陆了。
那用Ajax的话,怎样定期的给服务器发送请求呢。?学习了
23楼的方法不是很好嘛?B/S程序只能是客户端发送请求给服务端,服务端接受处理请求,只要你任意一个页面开着,这个Ajax就每隔1秒发送一个我还在浏览的信息到服务器,你关闭了窗口就不会发送了,这样即使你强行关闭浏览器,断电了,电脑被炸了,地震了。服务器过了超过1秒时间没有收到你的确认消息就自动注销你的session就是了。可以把登陆消息确认时间记在session中,写一个守护线程,每1秒检查一下session列表中,发现某一个超过时间没有确认就把他做了
那可真是吃力不讨好只能用ajax轮询来实现了,监听window.onunload是不稳定的,非法关机就根本找不到。只能在浏览器上开一个iframe, 隔个半分钟自动去服务器请求一次,服务器接收到请求就说明客户端还活着,否则就把客户踢出系统。问题是,什么情况需要这么实时????????????自找苦吃。
我那只是思路,不代表真这样,存储的信息不一定是SESSION的ID,也可以存其他东西,但是基本思路是这样的.........