`

Session

    博客分类:
  • java
阅读更多

1.http://www.jspcn.net/htmlnews/11049329478121583.html       监听器

 

2.session.invalidate() ,session才会destroy

 

3.HttpSessionListener:  这个监听取不到session里面的值

 

http://hi.baidu.com/tianshiyeben/blog/item/17d43923d695d042ad34de36.html

 

http://www.family168.com/tutorial/jsp/html/jsp-ch-04.html#jsp-ch-04-02    在线列表实例

下面的代码可以获取上线,下线的在线列表:

 

public class OnlineListener implements HttpSessionListener ,HttpSessionAttributeListener{

                 

            public void sessionCreated(HttpSessionEvent event) {//只要一打开浏览器就会执行,没有登陆也会执行.

                   }

            public void sessionDestroyed(HttpSessionEvent event) {//只有超时,invalidate()才会执行
  
                   HttpSession se=event.getSession();
                  OnlineManager.getInstance().removeSession(se); //从列表中删除
               // System.out.println("remove session....................");//为什么浏览窗口关闭了,没有执行啊???
  
             }

         public void attributeAdded(HttpSessionBindingEvent event) {//如果登陆成功,就把上线用户添加到列表.
              HttpSession se=event.getSession();
             String name=event.getName();
              String value=(String)event.getValue();
              if("username".equals(name)){
                      OnlineManager.getInstance().addSession(se); //添加
             }
            }

}

 

public class OnlineManager {

 private static OnlineManager om;
 private  Map<String,HttpSession> sessions;
 private OnlineManager(){
  sessions=new HashMap<String,HttpSession>();//为什么没有共用一个sessions;
 }
 public static OnlineManager getInstance(){
  if(om==null){
   om=new OnlineManager();
  }
  return om;
 }
 public void addSession(HttpSession se){
  String key=(String)se.getAttribute("username");
  sessions.put(key, se);
  System.out.println("add 1 : "+sessions.size());
  
 }
 public void removeSession(HttpSession se){
  String key=(String)se.getAttribute("username");
  //sessions.remove(key);  //这个只是把key=null
  sessions.remove(sessions.get(key));
  System.out.println("remove 1 : " +"key:"+key+sessions.size());
  System.out.println(sessions);
 }
}
------------------------

第二种方法实现在线,下线:

public class BindSession implements HttpSessionBindingListener {
 
 private String username;
 
 public BindSession(String username){
  this.username=username;
 }
 public void valueBound(HttpSessionBindingEvent event) {
   HttpSession session = event.getSession();
  // String name=(String)session.getAttribute("name");
  
      ServletContext application = session.getServletContext();

      // 把用户名放入在线列表
      List onlineUserList = (List) application.getAttribute("onlineUserList");
      // 第一次使用前,需要初始化
      if (onlineUserList == null) {
          onlineUserList = new ArrayList();
          application.setAttribute("onlineUserList", onlineUserList);
      }
      onlineUserList.add(this.username);
      System.out.println("valueBound: .........."+onlineUserList.size());
 }

 public void valueUnbound(HttpSessionBindingEvent event) {
   HttpSession session = event.getSession();
  // String name=(String)session.getAttribute("name");
      ServletContext application = session.getServletContext();

      // 从在线列表中删除用户名
      List onlineUserList = (List) application.getAttribute("onlineUserList");
      onlineUserList.remove(this.username);

      System.out.println(this.username + "退出。");


 }

}

public class Login extends HttpServlet {

             protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  String name=req.getParameter("name");
  String pass=req.getParameter("password");
  boolean isLogin=false;
  int len=set.size();
  for(int i=0;i<len;i++){
   if(set.containsKey(name)&&set.containsValue(pass)){
    isLogin=true;
   }
  }
  
  if(isLogin){
   req.getSession().setAttribute("username", name);
   System.out.println("login ...username="+name);
   
   //BindListener的使用:
   BindSession bl=new BindSession(name);
   req.getSession().setAttribute("lis", bl);
   resp.sendRedirect("index.jsp");
  }
  else{
   resp.sendRedirect("login.jsp");
  }
 

分享到:
评论

相关推荐

    js操作session例子

    在Web开发中,Session是一种非常重要的机制,用于在用户的整个会话期间保持数据。JavaScript(JS)作为客户端脚本语言,通常与HTML和CSS一起工作,处理用户交互和动态更新页面内容。然而,由于安全性和同源策略的...

    session session session szsessdifn

    【session session session szsessdifn】 在Web开发中,Session是一个至关重要的概念,尤其是在ASP.NET框架下。Session机制是服务器端存储用户特定信息的一种方式,它允许开发者在多个页面之间保持用户状态,解决了...

    Springboot实现多服务器session共享

    Springboot实现多服务器session共享是指在分布式系统中,每个服务器上的Session可以共享,实现 Session 的同步和共享,从而解决了在分布式环境中Session不一致的问题。下面是关于Springboot实现多服务器session共享...

    session共享 memcached-session-manager 1.9.6 jar

    在IT行业中,尤其是在Web应用程序开发中,Session共享是解决多服务器间用户状态一致性的重要技术。Memcached是一款广泛应用的高性能分布式内存对象缓存系统,它能够有效地缓解数据库的压力,提高系统的响应速度。`...

    tomcat-redis-session-manager

    《Tomcat Redis Session Manager:实现高效会话管理》 在Web应用开发中,session管理是不可或缺的一部分,它用于存储用户状态信息,确保用户在不同页面间保持登录状态。然而,随着分布式系统的普及,单个服务器的...

    微信小程序实现Session功能及无法获取session问题的解决方法

    因为小程序原生不支持Cookie,因此也不支持Session。 网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码。 大概思路就是借助小程序本地储存+网络请求的header可读可写来...

    tomcat-redis-session-manager实现session共享 配置文件

    在分布式系统中,Session共享是一个常见的需求,尤其是在使用Tomcat这样的Servlet容器时。"tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的...

    自己实现的spring-session

    如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...

    Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包

    标题 "Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包" 涉及的是在使用Nginx做负载均衡时,如何通过集成Redis来实现Tomcat7服务器之间的Session共享,从而确保用户在不同服务器之间切换时仍然能够保持...

    iframe 跨域访问session

    然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...

    session共享jar包(三个)

    在IT行业中,session共享是一个重要的概念,特别是在分布式系统或者多服务器环境下的Web应用。当用户在网站上进行操作时,服务器会创建一个session来存储用户的会话信息,如登录状态、购物车等。然而,如果一个网站...

    Jsp内置对象session总结

    JSP 内置对象 Session 总结 Session 对象是一种 JSP 内置对象,用于管理客户端与服务器端之间的会话期。下面是 Session 对象的详细介绍。 什么是 Session Session 对象是一个 JSP 内置对象,它在第一个 JSP 页面...

    Hibernate-nosession

    然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为重要。本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么...

    详解php设置session(过期、失效、有效期)

    此外,还可以自定义Session的启动方式,例如创建一个名为`start_session`的函数,它可以接受期望的过期时间作为参数: ```php function start_session($expire = 0) { if ($expire == 0) { $expire = ini_get('...

    NET的csharp的session丢失sessionid不一样

    ### 关于.NET中C# Session丢失与SessionID变化问题解析 #### 一、问题背景及概述 在.NET框架中,特别是在使用C#进行Web开发时,Session管理是至关重要的一个环节。Session对象允许服务器存储有关用户会话的信息,...

    Session丢失原因和解决方案

    ASP.NET Session 丢失通常是由多种原因引起的,包括进程重启、Session超时、配置文件更改、应用程序更新或杀毒软件活动。在深入探讨解决方案之前,让我们先理解Session的基本原理。 Session是一种服务器端的状态...

    退出页面自动清除session技巧

    ### 退出页面自动清除session技巧 在Web应用开发过程中,管理用户会话是十分重要的一个环节。Session机制作为实现用户状态跟踪的一种手段,在各种应用场景中都扮演着关键角色。但是,如何有效地管理并适时地清除...

    Cookie、Session和Token三者的区别及使用

    ### Cookie、Session与Token的区别及使用详解 #### 一、Cookie **定义**: Cookie是一种用于在客户端保持状态的方案。简单来说,当你访问一个网站时,该网站可能会在你的计算机上留下一些信息(如用户名、密码等),...

    判断session过期的方式

    在Web开发中,Session是用于跟踪用户状态的一种技术。当用户登录网站后,服务器会创建一个Session对象,并将其关联到用户的浏览器。这个Session对象通常包含用户的一些关键信息,如用户名、权限等。然而,为了安全...

    设定tomcat中session过期时间.txt

    ### 设定Tomcat中Session过期时间的三种方式 在Web开发中,Session管理是确保用户状态跟踪的重要机制之一。Tomcat作为一款广泛使用的Java应用服务器及Servlet容器,提供了多种方式来设定Session的有效时长。这有助...

Global site tag (gtag.js) - Google Analytics