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");
}
相关推荐
在Web开发中,Session是一种非常重要的机制,用于在用户的整个会话期间保持数据。JavaScript(JS)作为客户端脚本语言,通常与HTML和CSS一起工作,处理用户交互和动态更新页面内容。然而,由于安全性和同源策略的...
【session session session szsessdifn】 在Web开发中,Session是一个至关重要的概念,尤其是在ASP.NET框架下。Session机制是服务器端存储用户特定信息的一种方式,它允许开发者在多个页面之间保持用户状态,解决了...
Springboot实现多服务器session共享是指在分布式系统中,每个服务器上的Session可以共享,实现 Session 的同步和共享,从而解决了在分布式环境中Session不一致的问题。下面是关于Springboot实现多服务器session共享...
在IT行业中,尤其是在Web应用程序开发中,Session共享是解决多服务器间用户状态一致性的重要技术。Memcached是一款广泛应用的高性能分布式内存对象缓存系统,它能够有效地缓解数据库的压力,提高系统的响应速度。`...
《Tomcat Redis Session Manager:实现高效会话管理》 在Web应用开发中,session管理是不可或缺的一部分,它用于存储用户状态信息,确保用户在不同页面间保持登录状态。然而,随着分布式系统的普及,单个服务器的...
因为小程序原生不支持Cookie,因此也不支持Session。 网上找到的的一些方法有缺陷,而且很多累赘,估计没有实际测试过,在此直接给出实测可用的代码。 大概思路就是借助小程序本地储存+网络请求的header可读可写来...
在分布式系统中,Session共享是一个常见的需求,尤其是在使用Tomcat这样的Servlet容器时。"tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的...
如果没有sessionId就新创建session,如果有sessionId,就去redis中查看是否有此id的记录,如果没有就新建session,如果有,还是新建session,并把redis中此session的相关数据赋值给新建的session,最后保存sessionId...
标题 "Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包" 涉及的是在使用Nginx做负载均衡时,如何通过集成Redis来实现Tomcat7服务器之间的Session共享,从而确保用户在不同服务器之间切换时仍然能够保持...
然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...
在IT行业中,session共享是一个重要的概念,特别是在分布式系统或者多服务器环境下的Web应用。当用户在网站上进行操作时,服务器会创建一个session来存储用户的会话信息,如登录状态、购物车等。然而,如果一个网站...
JSP 内置对象 Session 总结 Session 对象是一种 JSP 内置对象,用于管理客户端与服务器端之间的会话期。下面是 Session 对象的详细介绍。 什么是 Session Session 对象是一个 JSP 内置对象,它在第一个 JSP 页面...
然而,在某些特定场景下,我们可能并不需要频繁地打开和关闭Session,这时“Hibernate-nosession”就显得尤为重要。本文将深入探讨Hibernate-nosession的概念、应用场景以及如何在实际代码中实现。 首先,理解什么...
此外,还可以自定义Session的启动方式,例如创建一个名为`start_session`的函数,它可以接受期望的过期时间作为参数: ```php function start_session($expire = 0) { if ($expire == 0) { $expire = ini_get('...
### 关于.NET中C# Session丢失与SessionID变化问题解析 #### 一、问题背景及概述 在.NET框架中,特别是在使用C#进行Web开发时,Session管理是至关重要的一个环节。Session对象允许服务器存储有关用户会话的信息,...
ASP.NET Session 丢失通常是由多种原因引起的,包括进程重启、Session超时、配置文件更改、应用程序更新或杀毒软件活动。在深入探讨解决方案之前,让我们先理解Session的基本原理。 Session是一种服务器端的状态...
### 退出页面自动清除session技巧 在Web应用开发过程中,管理用户会话是十分重要的一个环节。Session机制作为实现用户状态跟踪的一种手段,在各种应用场景中都扮演着关键角色。但是,如何有效地管理并适时地清除...
### Cookie、Session与Token的区别及使用详解 #### 一、Cookie **定义**: Cookie是一种用于在客户端保持状态的方案。简单来说,当你访问一个网站时,该网站可能会在你的计算机上留下一些信息(如用户名、密码等),...
在Web开发中,Session是用于跟踪用户状态的一种技术。当用户登录网站后,服务器会创建一个Session对象,并将其关联到用户的浏览器。这个Session对象通常包含用户的一些关键信息,如用户名、权限等。然而,为了安全...
### 设定Tomcat中Session过期时间的三种方式 在Web开发中,Session管理是确保用户状态跟踪的重要机制之一。Tomcat作为一款广泛使用的Java应用服务器及Servlet容器,提供了多种方式来设定Session的有效时长。这有助...