?? xunxunsession.java
字號:
package com.xunxun.app;
// ============================
// 建立:gasoline
// 時間:2004-05-26
// 描述:本類主要方法: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 + -