采取HttpSessionListener接口窃听器Session的生成和失效版权声明
原创HttpSessionListener :
Session创建事件在每次新的session创建,类似地Session故障事件一次发生。Session当它失败时。
此接口还仅包含两个方法,分别对应Session创建和失效:
public void sessionCreated(HttpSessionEvent se);
public void sessionDestroyed(HttpSessionEvent se);
我的web我想知道有多少用户在使用它?
网站经常需要提供上网人数的统计数据。过去,一般的做法是登录和退出功能相结合,即当用户输入用户名和密码进行登录时,会添加计数器1然后,当用户单击退出按钮退出系统时,计数器递减。1。这种处理方式有一些缺点,比如用户正常登录后,可能会忘记点击退出按钮,直接关闭浏览器,导致计数器减少。1手术没有及时进行。网站上经常有一些无需登录就可以访问的内容,在这种情况下,上述方法不能用于在线人口统计。
我们可以利用这个机会Servlet规范中定义的事件侦听器(Listener)解决这一问题,实现更精准的网上人数清点功能。对于每个被访问的用户,J2EE所述应用服务器建立对应的HttpSession物体。当浏览器第一次访问网站时,J2EE应用程序服务器创建一个新的服务器。HttpSession对象 ,并触发 HttpSession创建事件 ,如果已注册HttpSessionListener事件侦听器,它调用HttpSessionListener事件侦听器的sessionCreated方法。相反,当浏览器访问结束并超时时,J2EE应用服务器将销毁相应的HttpSession对象,触发 HttpSession销毁事件并调用已注册的HttpSessionListener事件侦听器的sessionDestroyed方法。
Java代码
-
import javax.servlet.http.HttpSessionListener;
-
import javax.servlet.http.HttpSessionEvent;
-
public class SessionCounter implements HttpSessionListener {
-
private static int activeSessions =0;
-
/ Session创建事件 /
-
public void sessionCreated(HttpSessionEvent se) {
-
ServletContext ctx = event.getSession( ).getServletContext( );
-
Integer numSessions = (Integer) ctx.getAttribute("numSessions");
-
if (numSessions == null) {
-
numSessions = new Integer(1);
-
}
-
else {
-
int count = numSessions.intValue( );
-
numSessions = new Integer(count + 1);
-
}
-
ctx.setAttribute("numSessions", numSessions);
-
}
-
/ Session失效事件 /
-
public void sessionDestroyed(HttpSessionEvent se) {
-
ServletContext ctx=se.getSession().getServletContext();
-
Integer numSessions = (Integer)ctx.getAttribute("numSessions");
-
<span class="oblog_text"> if(numSessions == null)
-
numSessions = new Integer(0);
-
}
-
else {
-
int count = numSessions.intValue( );
-
numSessions = new Integer(count - 1);
-
}
-
ctx.setAttribute("numSessions", numSessions);
-
}
-
}
在此解决方案中,任何一个Session在创建或销毁时通知。SessionCounter 当然,这一类通知的原因是它必须在。web.xml在文件中进行相关配置工作。以下是配置代码:
Java代码
-
-
demo.listener.SessionCounter
在两种情况下都发生sessionDestoryed(会话销毁)事件:
1.执行session.invalidate()方法时 。
既然LogoutServlet.java中执行session.invalidate()在以下情况下触发sessionDestory()来自在线用户 清除列表中的当前用户,我们没有LogoutServlet.java在网上榜单操作中,所以。LogoutServlet.java内容现在是 这样。
Java代码
-
public void doGet(HttpServletRequest request,HttpServletResponse response)
-
throws ServletException, IOException {
-
// 销毁session
-
request.getSession().invalidate();
-
// 成功
-
response.sendRedirect("index.jsp");
-
}
-
如果用户很长时间没有访问服务器,则会超过最大会话超时。 ,服务器将自动销毁超时session。
会话超时可以是web.xml为了更容易地看到超时效果,我们将超时设置为最小值。
Java代码
-
-
1
时间单位为一分钟,只能为整数。如果为零或负,则会话永远不会超时。
2.HttpSessionEvent
这是一个表示web在应用程序内更改会话事件通知。
Java代码
-
public class ShopSessionListener implements HttpSessionListener {
-
public void sessionCreated(HttpSessionEvent se) {
-
}
-
public void sessionDestroyed(HttpSessionEvent se) {
-
String sessionid = se.getSession().getId();
-
EopSite site =(EopSite)ThreadContextHolder.getSessionContext().getAttribute("site_key");
-
if(site!=null){
-
ICartManager cartManager = SpringContextHolder.getBean("cartManager");
-
cartManager.clean(sessionid,site.getUserid(),site.getId());
-
}
-
}
-
}
se.getSession().getId();
HttpSession 接口中的getId():
Returns a string containing the unique identifier assigned to this session.
返回一个字符串,该字符串包含分配给此会话的唯一标识符。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除