java之构建自己的session

原创 2016年08月31日 11:09:34
package com.ideai.service;

import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;
import java.util.UUID;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.springframework.stereotype.Service;

import com.ideai.service.BaseService;

@Service
public class SessionManagerService extends BaseService {

	private int expired = 3600;// 秒
	private int checkInterval = 1800;// 秒
	private Timer timer = null;

	public int getExpired() {
		return expired;
	}

	static class DeleteJob extends java.util.TimerTask {

		Map<String, Map<String, Object>> sessions;
		Map<String, Date> sessionExpired;

		public DeleteJob(Map<String, Map<String, Object>> sessions, Map<String, Date> sessionExpired) {
			this.sessionExpired = sessionExpired;
			this.sessions = sessions;
		}

		@Override
		public void run() {
			Date now = new Date();
			for (String key : sessionExpired.keySet()) {
				if (now.after(sessionExpired.get(key))) {
					sessions.remove(key);
					sessionExpired.remove(key);
				}
			}

		}
	}

	@PostConstruct
	public void init() {
		// 删除过期的session
		DeleteJob job = new DeleteJob(sessions, sessionExpired);
		timer = new Timer(true);
		timer.schedule(job, 0, checkInterval);

	}

	@PreDestroy
	public void uninit() {
		if (timer != null) {
			try {
				timer.cancel();
			} catch (Exception e) {
				// TODO: handle exception
			}
		}

	}

	// 设置session过期时间
	public void setExpired(int expired) {
		this.expired = expired;
	}

	public final Map<String, Map<String, Object>> sessions = Collections
			.synchronizedMap(new HashMap<String, Map<String, Object>>());
	public final Map<String, Date> sessionExpired = Collections.synchronizedMap(new HashMap<String, Date>());

	// 保存session
	public synchronized void setSession(String key, Map<String, Object> session) {
		this.sessions.put(key, session);
		Date now = new Date();
		this.sessionExpired.put(key, new Date(now.getTime() + expired * 1000));
	}

	// 删除session
	public void removeSession(String key) {
		this.sessions.remove(key);
	}

	// 获取session
	public Map<String, Object> getSession(String key) {
		return this.sessions.get(key);
	}
	
	// 生成sessionid
	public String genId() {
			return UUID.randomUUID().toString();
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

java中如何使用session

几乎所有的Web开发语言都支持Session功能,Servlet也不例外。 Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。 作用域分为四种,分别为: ...
  • qq_35284255
  • qq_35284255
  • 2016年11月16日 11:01
  • 476

JAVA中session实现原理

JAVA中session实现原理
  • educast
  • educast
  • 2016年08月05日 17:24
  • 2327

Java中session的销毁

【概述】 之前文章中介绍过Session,Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户...
  • u012581322
  • u012581322
  • 2016年12月11日 19:55
  • 6911

第三章 Java基础之cookie和session的区别和联系

在介绍cookie和session之前先废话两句,最近面试了两家公司,第一家公司在笔试题中问道了对cookie的属性作介绍,第二家在面试的过程中问道了cookie和session的区别,自己只说了两点...
  • wangbiao007
  • wangbiao007
  • 2016年03月05日 16:58
  • 1487

java:Session(会话)机制详解

【转】java:Session(回话)机制详解 书中讲: 以下情况,Session结束生命周期,Servlet容器将Session所占资源释放: 1.客户端关闭浏览器 2.Session过期 3.服...
  • DD_lemon
  • DD_lemon
  • 2015年06月18日 09:53
  • 7453

Java session共享的问题

Java session共享的问题分为主子域名相互共享、多个tomcat或项目共享(也可以理解成分布式部署后的多台服务器间session共享) 为什么我们处理共享session? 对于一个项目有主...
  • zhongyangjian
  • zhongyangjian
  • 2017年04月13日 16:03
  • 1796

session原理及集群中session共享实现原理

转载网上看到的两篇关于集群中实现session共享的两篇文章,个人觉得不错,学习了: 对Web服务器进行集群,Session的安全和同步是最大的问题,实现Session同步有很多种方...
  • fuxiaohui
  • fuxiaohui
  • 2015年05月02日 16:51
  • 6866

Session工具类:实例1

package cn.itcast.hibernate; import java.util.Date; import java.util.List; import org.hiberna...
  • yangdayin
  • yangdayin
  • 2013年04月24日 22:02
  • 2429

javaWeb_session案例一:09-利用session完成用户登陆

  • woshirongshaolin
  • woshirongshaolin
  • 2013年02月17日 21:09
  • 8808

Java后台学习之---cookie和session学习

cookie和session对比 cookie特点: 1) 会话数据存放在浏览器 2) 数据类型只能是String,而且有大小限制 3) 数据存放不安全 session特点: 1)会话数据存放在服...
  • u012920206
  • u012920206
  • 2016年09月12日 23:30
  • 2698
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java之构建自己的session
举报原因:
原因补充:

(最多只允许输入30个字)