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

📄 sessionmanager.java

📁 本程序是作者开发的一个宽带娱乐系统的一个模块.
💻 JAVA
字号:
package com.singnet.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;

import javax.servlet.http.HttpSession;

import com.singnet.common.UserInfo;
import com.singnet.common.UserOnlineInfo;;


public class SessionManager{
	/** 激活的session列表 */
	private static Map activeSessions = new Hashtable();

	/** 在线数据列表 */
	private static Map onlineMap = new Hashtable();

	private static SessionManager sm = new SessionManager();

	private static String GUEST_ID="00000";
	private static String LOGIN_USER="openheart";
	private SessionManager() {
	}

	public SessionManager getSessionManager() {
		return sm;
	}

	/**
	 * 清空session列表
	 */
	public synchronized static void clearSession() {
		activeSessions.clear();
	}

	/**
	 * 检索激活的session 拷贝一个session副本列表
	 */
	public static Collection getActiveSessions() {
		synchronized (activeSessions) {
			return new ArrayList(activeSessions.values());
		}
	}

	/**
	 * 增加一个session到当前列表,只限于监听器调用
	 */
	public static void addSession(HttpSession session) {
		activeSessions.put(session.getId(), session);
		//SysUtils.addAccessCount();
	}

	/**
	 * 删除一个session从当前列表,只限于监听器调用
	 */
	public static void removeSession(HttpSession session) {
		activeSessions.remove(session.getId());
		removeOnline(session.getId());
	}

	/**
	 * 判断一个用户是否登录
	 */
	public static boolean isUserLoggedIn(UserInfo user) {
		return getActiveUsers().contains(user);
	}

	/**
	 * 检索所有在线会员
	 */
	public static Collection getActiveUsers() {
		Collection users = null;
		synchronized (activeSessions) {
			users = new ArrayList((int) (activeSessions.size() * 0.7));
			for (Iterator i = activeSessions.values().iterator(); i.hasNext();) {
				UserInfo u = getUserFromSession((HttpSession) i.next());
				if (u != null && u.getUid() != GUEST_ID) {
					users.add(u);
				}
			}
		}

		return users;
	}

	/**
	 * 检索所有游客
	 */
	public static Collection getGuests() {
		Collection users = null;
		synchronized (activeSessions) {
			// Pre-allocate a list which won't need expansion more
			// than once.
			users = new ArrayList((int) (activeSessions.size() * 0.7));
			for (Iterator i = activeSessions.values().iterator(); i.hasNext();) {
				UserInfo u = getUserFromSession((HttpSession) i.next());
				if (u != null && u.getUid() == GUEST_ID) {
					users.add(u);
				}
			}
		}
		return users;
	}

	/**
	 * 从指定的session中获得一个用户对象
	 */
	public static UserInfo getUserFromSession(HttpSession session) {
		return (UserInfo) session.getAttribute(LOGIN_USER);
	}

	/**
	 * 从当前列表取出一个session
	 */
	public static HttpSession getSession(String sessionId) {
		return (HttpSession) activeSessions.get(sessionId);
	}

	/**
	 * 检索一个用户所有的session对象,当多个客户端使用一个用户登录时有用
	 */
	public static Collection getSessionsForUser(UserInfo user) {
		Collection sessions = new ArrayList();
		synchronized (activeSessions) {
			for (Iterator i = activeSessions.values().iterator(); i.hasNext();) {
				HttpSession session = (HttpSession) i.next();
				UserInfo u = getUserFromSession(session);
				if (user.equals(u)) {
					sessions.add(session);
				}
			}
		}

		return sessions;
	}

	/**
	 * 增加一个在线数据对象到在线数据列表,同时保存到数据库
	 * 
	 * @param sessionid
	 * @param online
	 * @throws BaseException
	 */
	public static void addOnline(String sessionid, UserOnlineInfo online)
			throws Exception {
		try {
			//SysUtils.addAccessCount();
			//online.save();
		} catch (Exception e) {
			throw new Exception("-1", e);
		}
		onlineMap.put(sessionid, online);
	}

	/**
	 * 删除一个在线数据对象,并设置退出时间保存到数据库
	 * 
	 * @param sessionid
	 */
	public static void removeOnline(String sessionid) {
		if (StringUtils.isNotEmpty(sessionid)) {
			UserOnlineInfo online = (UserOnlineInfo) onlineMap.get(sessionid);

			if (null != online) {
				try {
					online.setOuttime(String.valueOf(StringUtils.getLongDate()));
					//online.setOuttime(StringUtils.getLongDate());
					//online.save();

				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			onlineMap.remove(sessionid);
		}
	}

}

⌨️ 快捷键说明

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