📄 sessionmanager.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 + -