⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xunxunsession.java

📁 JAVA SESSION操作类。本类主要方法:setAttribute()
💻 JAVA
字号:
package com.xunxun.app;
// ============================
// 描述:本类主要方法:setAttribute(),getAttribute(), removeSession()
// ============================
import java.util.*;
import com.xunxun.util.NowTime;

public class XunxunSession {
	private static Vector vt = null;
	
	private static int MaxNum = 1000; //默认最大session数 100;
	private static int MaxDelay = 60 * 30 * 1; // 单位秒,默认为30分钟
	
	
	public XunxunSession()
	{
		vt = new Vector();
	}
	
	public String getSessionn(Object obj)
	{
			
		return (String)obj;
	}
	// 初始化最大session数和最大延时。
	// 当任何参数值小于等于0 ,则该参数使用默认值
	public  XunxunSession(int maxNum , int maxDelay)
	{
		vt = new Vector();
		if ( maxDelay > 0)
			MaxDelay = maxDelay;
		if ( maxNum > 0) 
			MaxNum = maxNum;
	}
	
	// 从session列表里移除一个session
	// return > 0 成功移除,返回值等于 列表的index值
	// return < 0 移除失败,该session不存在。
	public int removeSession(String mobile)
	{
		int reIndex = -1;
		Hashtable ht = null;
		int j = vt.size();
		for( int i=0; i < j; i ++  )
		{
			ht = (Hashtable)vt.get(i);
			
			// 如果session存在则移除
			if ( (ht.get("mobile")).equals(mobile) )
			{
				vt.remove(i);
				reIndex = i;
				break;
			}
		}
		return reIndex;
	}
	// 设置session属性值,mobile作为sessionID,
	// 规则:如果session存在,则修改属性值,如session不存在则自动新建一个session
	// return 1: session存在
	// return 2: session不存在,正常新建
	// return 3: session不存在,且发出session已满,警告。
	public int setAttribute(String mobile,Object objName,Object desObj)
	{
		Vector vtc = null;
		Hashtable ht = null;
		int flag = 0;
		int j = vt.size();
		for( int i=0; i < j;  )
		{
			ht = (Hashtable)vt.get(i);
			
			// 如果session超时了,丢弃
			if ( NowTime.getIntTimeSecon() - Long.parseLong((ht.get("lastTime")).toString()) > MaxDelay )
			{  
				vt.remove(i);
				j = j -1;
				continue;
			}
			// 如果session存在则返回false
			if ( (ht.get("mobile")).equals(mobile) )
			{
				ht.put( objName,desObj);
				ht.put("lastTime",String.valueOf(NowTime.getIntTimeSecon()) ); // session lastTime 标识
				flag = 1; // 标志为 session 存在
				break;
			}
			i++;			 
		}
		if ( flag == 0 )
		{
			int t = this.newSession(mobile,objName,desObj);
			if ( t == 0)
				flag = 2; //标志为成功新建一个session
			if ( t == 1)
			    flag = 3; //警告 session 最大数量已满,但成功建立session
		}
		return flag;
		
	}
	public Object getAttribute(String mobile,Object objName)
	{
		Hashtable ht = null;
		Object reObj = null;
		int j = vt.size();
		for( int i=0; i < j;  )
		{
			ht = (Hashtable)vt.get(i);
			
			// 如果session超时了,丢弃
			if ( NowTime.getIntTimeSecon() - Long.parseLong((ht.get("lastTime")).toString()) > MaxDelay )
			{  
				vt.remove(i);
				j = j -1;
				continue;
			}
			// 如果session存在则返回false
			if ( (ht.get("mobile")).equals(mobile) )
			{
				reObj = ht.get(objName);
				ht.put("lastTime",String.valueOf(NowTime.getIntTimeSecon()) ); // 更新session lastTime 标识
				break;
			}
			i++;			 
		}
		return reObj;		
	}	
	
	// 得到当前session数
	public int getSessionCount()
	{
		return vt.size();  
	}	
	
	// 清空所有Session
	public void clearSession()
	{
		vt.clear();
	}
	
	// 以下为属性方法
	// 最大Session数属性
	public int getMaxNum()
	{
		return MaxNum;
	}
	public void setMaxNum( int maxNum )
	{
		if ( maxNum > 0)
			MaxNum = maxNum; 
	}
	
	// 最大延时属性
	public int getMaxDelay()
	{
		return MaxDelay;	
	}
	public void setMaxDelay( int maxDelay )
	{
		if (maxDelay > 1)
			MaxDelay = maxDelay; 
	}
	
	// 新建Session成功,返回true,否则返回false;
	// return 0 ; 成功增加一个session
	// return 1 : 警告 session 最大数量已满
	private int newSession(String mobile)
	{
		Hashtable htable = null;
		int flag = 0;
		if ( (vt.size() == MaxNum ) && (vt.size() > 0) )
		{
			// 从session队列里去掉最早的session
			vt.remove(0);
			flag = 1;
		}
		htable =  new Hashtable();
		htable.put("mobile",mobile); // mobile 作为session ID来用。
		htable.put("lastTime",String.valueOf(NowTime.getIntTimeSecon()) ); // session lastTime 标识
		vt.add(htable);
		return flag;
	}
	// 增加属性同时增加一个session,用于,设置属性的时候自动增加session
	// return 0 ; 成功增加一个session
	// return 1 : 警告 session 最大数量已满
	private int newSession(String mobile,Object objName,Object desObj)
	{
		Hashtable htable = null;
		int flag = 0;
		if ( (vt.size() == MaxNum ) && (vt.size() > 0) )
		{
			// 从session队列里去掉最早的session
			vt.remove(0);
			flag = 1;
		}
		htable =  new Hashtable();
		htable.put("mobile",mobile); // mobile 作为session ID来用。
		htable.put("lastTime",String.valueOf(NowTime.getIntTimeSecon()) ); // session lastTime 标识
		htable.put(objName,desObj);
		vt.add(htable);
		
		return flag;
	}
	
	// 检查该mobile是否在session队列 (暂时无用)
	private boolean checkSession(String mobile)
	{
		Hashtable ht = null;
		boolean flag = true;
		int j = vt.size();
		for( int i=0; i < j;  )
		{
			ht = (Hashtable)vt.get(i);
			
			// 如果session超时了,丢弃
			if ( NowTime.getIntTimeSecon() - Long.parseLong((ht.get("lastTime")).toString()) > MaxDelay )
			{  
				vt.remove(i);
				j = j -1;
				continue;
			}
			// 如果session存在则返回false
			if ( (ht.get("mobile")).equals(mobile) )
			{
				flag = false;
				break;
			}
			i++;			 
		}
		return flag;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -