自定义Session创建及销毁

41 篇文章 1 订阅

web.xml

<listener>
	<listener-class>com.iflytek.atp.web.listener.SessionListener</listener-class>
</listener>

SessionListener类:

package com.iflytek.atp.web.listener;

import java.util.Hashtable;
import java.util.Map;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import com.iflytek.atp.redis.REDIS;

public class SessionListener implements HttpSessionListener,
		HttpSessionAttributeListener {

	// 保存当前redis中所有登录用户的HttpSession:redisKey
	public static Map<HttpSession, String> redisKey = new Hashtable<HttpSession, String>();

	// Session失效或者过期的时候调用的这个方法,
	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		// 如果session超时, 则从map中移除这个用户
		try {
			if (redisKey.containsKey(se.getSession())) {
				String[] token_accountId = redisKey.get(se.getSession()).split(";");
				String token = token_accountId[0];
				String accountId = token_accountId[1];
				if(REDIS.exists(token)){//token
					// 如果redis中存在,则删除
					REDIS.remove(token);//token
				}
				if (REDIS.exists(accountId)) {//accountId
					// 如果redis中存在,则删除
					REDIS.remove(accountId);//accountId
				}
				redisKey.remove(se.getSession());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * session创建的时候
	 * @param arg0
	 */
	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
	}

	@Override
	public void attributeAdded(HttpSessionBindingEvent arg0) {

	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent arg0) {

	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent arg0) {

	}

}

HttpSessionListener有2个接口需要实现

sessionCreated//新建一个会话时候触发也可以说是客户端第一次和服务器交互时候触发

sessionDestroyed//销毁会话的时候 一般来说只有某个按钮触发进行销毁 或者配置定时销毁

HttpSessionAttributeListener有3个接口需要实现

attributeAdded//在session中添加对象时触发此操作 笼统的说就是调用setAttribute这个方法时候会触发的

attributeRemoved//修改、删除session中添加对象时触发此操作 笼统的说就是调用 removeAttribute这个方法时候会触发的

attributeReplaced//在Session属性被重新设置时

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值