日期:2014-05-18  浏览次数:20613 次

问个问题,session的创建撤销,即服务器所有session,分数250分,一共三个贴
问题1:
在jsp中如何得到服务器的所有session对象,注意,当你访问服务器的时候一般你得到的只是你自己的session对象,我查找了API但只找到得到自己的session对象,如何得到服务器的所有session对象。
问题2:
如何监听指定session的销毁及对象的销毁,如果该session过了web.xml的时间限制则服务器会自动销毁,如何监听销毁的这个时间,并在之前执行一段代码。
问题3:
大家都知道浏览器访问页面服务器会创建session,并给予客户端一个sessionID,如果客户端所有浏览器关闭是否证明该客户端sessionID销毁,再次登陆网站的时候服务器又会创建一个session并分配给客户端一个sessionID,如果不是服务器自己销毁session,是否只有到达时间限制后session在自动销毁。


本问题50分,另加本人的其他两张贴(每张贴100分)一直没结,所以一共250分,本贴问题答完后在另外两个贴随意回复既在结贴时给分!!
两张贴地址:
http://community.csdn.net/Expert/topic/5249/5249395.xml?temp=.774563
http://community.csdn.net/Expert/topic/5249/5249412.xml?temp=.8341944

------解决方案--------------------
public class SessionListen implements HttpSessionListener {

/* (非 Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionCreated(javax.servlet.http.HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent arg0) {
// TODO 自动生成方法存根


}

/* (非 Javadoc)
* @see javax.servlet.http.HttpSessionListener#sessionDestroyed(javax.servlet.http.HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent event)
{
HttpSession session=event.getSession();
// TODO 自动生成方法存根
String id=session.getId();
try
{
........
}
catch(Exception e)
{
System.out.println(e.getMessage());

}
}

}

在web.xml

<listener>
<listener-class> 包名.SessionListen </listener-class>
</listener>

------解决方案--------------------
问题1:这个问题不一定要找session,我想你是做用户在线之类的功能吧,那么用户通过session有判断是否在线,你肯定在数据库或其它地方有个标识吧(如有session时数据库该字段为1,session销毁了就更改为0),那么通过这个标识也能完成你要的功能
问题2:“如何监听销毁的这个时间,并在之前执行一段代码”这个是做不到的,因为销毁之前你根本就不能知道什么时候要销毁,但销毁了已经是之后的事了,但你可以这样试试,把session的值先传给一个变量,当监听到session销毁了,你还可以用这个变量来做你需要的事
问题3:要不手动(通过事件触发)销毁,要不就是超出时间自动销毁


------解决方案--------------------
问题1:
在jsp中如何得到服务器的所有session对象,注意,当你访问服务器的时候一般你得到的只是你自己的session对象,我查找了API但只找到得到自己的session对象,如何得到服务器的所有session对象。

---------------------------
好象没有这个方法

问题2:
如何监听指定session的销毁及对象的销毁,如果该session过了web.xml的时间限制则服务器会自动销毁,如何监听销毁的这个时间,并在之前执行一段代码。
---------------------------
实现HttpSessionListener接口,其中的两个方法分别对应创建和销毁

问题3:
大家都知道浏览器访问页面服务器会创建session,并给予客户端一个sessionID,如果客户端所有浏览器关闭是否证明该客户端sessionID销毁,再次登陆网站的时候服务器又会创建一个session并分配给客户端一个sessionID,如果不是服务器自己销毁session,是否只有到达时间限制后session在自动销毁。
---------------------------
是的
------解决方案--------------------
把SESSION放MAP里吧。


package com.yourcompany.struts.action;

import javax.servlet.http.HttpSessionEvent;

public class testSessionCount implements javax.servlet.http.HttpSessionListener{
//private static int sessionCount;
private static java.util.Map <String,javax.servlet.http.HttpSession> sessionList = new java.util.HashMap <String,javax.servlet.http.HttpSession> ();
public static int getSessionCount() {
return sessionList.size();
}

public static java.util.Map getSessionList() {
return sessionList;
}
public void sessionCreated(HttpSessionEvent arg0) {
javax.servlet.http.HttpSession session = arg0.getSession();
if(session != null) {
sessionList.put(session.getId(), session);
}
}

public void sessionDestroyed(HttpSessionEvent arg0) {
javax.servlet.http.HttpSession session = arg0.getSession();