请教各位大大,我做一个登录,利用监听器,代码如下:public class OnlineCounterListener implements javax.servlet.http.HttpSessionBindingListener{
private String user;
private String level;
private String id;
private String email;
private String postnum;
private String gold;
private String lastlogin;
private String loginnum;
private String pwd;
private OnlineCounter container=OnlineCounter.getInstance();
bll.Account accBll=new bll.Account();
public OnlineCounterListener(){
user="";
}
public void setPwd(String pwd){
this.pwd=pwd;
}
public String getPwd(){
return pwd;
}
public void setLastLogin(String login){
this.lastlogin=login;
}
public String getLastLogin(){
return lastlogin;
}
public void setLoginNum(String num){
this.loginnum=num;
}
public String getLoginNum(){
return loginnum;
} public void setID(String id){
this.id=id;
}
public String getID(){
return id;
}
public void setEmail(String Email){
this.email=Email;
}
public String getEmail(){
return email;
}
public void setPostnum(String num){
this.postnum=num;
}
public String getPostNum(){
return postnum;
}
public void setGold(String gold){
this.gold=gold;
}
public String getGold(){
return gold;
}
//设置在线人员
public void setUser(String user){
this.user=user;
}
//设置等级
public void setLevel(String level){
this.level=level;
}
//获取等级
public String getLevel(){
return level;
}
//获取在线监听
public String getUser(){
return user;
}
public void valueBound(HttpSessionBindingEvent arg0) {
// TODO 自动生成方法存根
System.out.print("Online:"+this.user+"---Level:"+level);
accBll.upLogin(this.id);
} public void valueUnbound(HttpSessionBindingEvent arg0) {
// TODO 自动生成方法存根
accBll.upLogout(id);
System.out.println("Leave:"+this.user+"---Level:"+level);
if(user!=""){
container.removeUserInfo(user);
container.removeUserInfo(level);
}
}
}web.xml设置如下: <session-config>
<session-timeout>10</session-timeout>
</session-config>
在登录的servlet中这样写的:ArrayList als=accBll.Login(name, pwd);
if(als.size()!=0){
OnlineCounter list=OnlineCounter.getInstance();
OnlineCounterListener ut=new OnlineCounterListener();
ut.setID(als.get(0).toString());
ut.setEmail(als.get(1).toString());
ut.setPwd(als.get(2).toString());
ut.setUser(als.get(3).toString());
ut.setPostnum(als.get(4).toString());
ut.setGold(als.get(5).toString());
ut.setLastLogin(als.get(6).toString());
ut.setLoginNum(als.get(7).toString());
ut.setLevel(als.get(8).toString());
request.getSession().setAttribute("user",ut);
list.addUserInfo(ut.getUser(),ut.getLevel());出现的问题是,我关闭浏览器之后。也要满web.xml中设置的时间--10分钟,session才会失效。
如果我设置的时间长一点。就做不到精确的判断这个用户是否在线了,请问怎样才能设置成关闭浏览器session就失效呢?
不知道是不是表达清楚了~~
private String user;
private String level;
private String id;
private String email;
private String postnum;
private String gold;
private String lastlogin;
private String loginnum;
private String pwd;
private OnlineCounter container=OnlineCounter.getInstance();
bll.Account accBll=new bll.Account();
public OnlineCounterListener(){
user="";
}
public void setPwd(String pwd){
this.pwd=pwd;
}
public String getPwd(){
return pwd;
}
public void setLastLogin(String login){
this.lastlogin=login;
}
public String getLastLogin(){
return lastlogin;
}
public void setLoginNum(String num){
this.loginnum=num;
}
public String getLoginNum(){
return loginnum;
} public void setID(String id){
this.id=id;
}
public String getID(){
return id;
}
public void setEmail(String Email){
this.email=Email;
}
public String getEmail(){
return email;
}
public void setPostnum(String num){
this.postnum=num;
}
public String getPostNum(){
return postnum;
}
public void setGold(String gold){
this.gold=gold;
}
public String getGold(){
return gold;
}
//设置在线人员
public void setUser(String user){
this.user=user;
}
//设置等级
public void setLevel(String level){
this.level=level;
}
//获取等级
public String getLevel(){
return level;
}
//获取在线监听
public String getUser(){
return user;
}
public void valueBound(HttpSessionBindingEvent arg0) {
// TODO 自动生成方法存根
System.out.print("Online:"+this.user+"---Level:"+level);
accBll.upLogin(this.id);
} public void valueUnbound(HttpSessionBindingEvent arg0) {
// TODO 自动生成方法存根
accBll.upLogout(id);
System.out.println("Leave:"+this.user+"---Level:"+level);
if(user!=""){
container.removeUserInfo(user);
container.removeUserInfo(level);
}
}
}web.xml设置如下: <session-config>
<session-timeout>10</session-timeout>
</session-config>
在登录的servlet中这样写的:ArrayList als=accBll.Login(name, pwd);
if(als.size()!=0){
OnlineCounter list=OnlineCounter.getInstance();
OnlineCounterListener ut=new OnlineCounterListener();
ut.setID(als.get(0).toString());
ut.setEmail(als.get(1).toString());
ut.setPwd(als.get(2).toString());
ut.setUser(als.get(3).toString());
ut.setPostnum(als.get(4).toString());
ut.setGold(als.get(5).toString());
ut.setLastLogin(als.get(6).toString());
ut.setLoginNum(als.get(7).toString());
ut.setLevel(als.get(8).toString());
request.getSession().setAttribute("user",ut);
list.addUserInfo(ut.getUser(),ut.getLevel());出现的问题是,我关闭浏览器之后。也要满web.xml中设置的时间--10分钟,session才会失效。
如果我设置的时间长一点。就做不到精确的判断这个用户是否在线了,请问怎样才能设置成关闭浏览器session就失效呢?
不知道是不是表达清楚了~~
这个做法我觉得不太好
就是在页面上用session.getAttribute("user")的方法得到的session是null的
但是在我的监听器中。它还没有被排除这个是为什么呢?
但是监听器的valueUnbound没有触发。这个是我什么呢?是不是我方法 用错了?
哪个大大可以告诉一下。。谢谢了~~
session.removeAttribute("sessionUserName");移除用户,但session不变,下次登陆的时候看到的sessionID还是一样的
Returns the current HttpSession associated with this request or, if if there is no current session and create is true, returns a new session.
session你可以认为是每一个IE进程对应一个会话(你新开一个IE进程就可以对应两个会话的)
getSession都是返回当前用户的会话对象,参数的区别在于
参数为true,则如果“当前用户的会话对象”为空(第一次访问时)则创建一个新的会话对象返回
参数为false,则如果“当前用户的会话对象”为空,则返回null(即不自动创建会话对象)
我尝试一下
里面很清楚
我想要的是即时消除session...