📄 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;
import java.text.ParseException;
import com.singnet.user.dao.UserOnlineDao;
public class SessionManager {
/** 激活的session列表 */
private static Map activeSessions = new Hashtable();
/** 在线数据列表 */
private static Map onlineMap = new Hashtable();
private static SessionManager sm = new SessionManager();
private static UserOnlineDao useronlinedao = new UserOnlineDao();
private static String GUEST_ID="111111";
public 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) {
users.add(u);
}
}
}
return users;
}
/**
* 从指定的session中获得一个用户对象
*/
public static UserInfo getUserFromSession(HttpSession session) {
return (UserInfo) session.getAttribute("onlineuser");//存储在session中的用户信息
}
/**
* 从当前列表取出一个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) {
try {
SysUtils.addAccessCount();
//保存到数据库
useronlinedao.save(online);
} catch (Exception e) {
e.printStackTrace();
}
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.setOnlineOuttime(StringUtils.getLongDate());
//删除一个在线用户
useronlinedao.save(online);
} catch (Exception e) {
e.printStackTrace();
}
}
onlineMap.remove(sessionid);
}
}
}
/*
public void setLoginUser(XidooUser user, boolean bool)
throws BaseException
{
if (bool)
{
getRequest().getSession().setAttribute("openheart", user);
setACL(user);
XidooOnline online = new XidooOnline();
online.setUserId(user.getUserId());
online.setOnlineIntime(StringUtils.getLongDate());
online.setOnlineIp(getRequest().getRemoteAddr());
SessionManager.addOnline(getRequest().getSession().getId(),online);
} else
{
getRequest().getSession().setAttribute(LOGIN_USER, getAnonymousUser());
setACL(user);
SessionManager.removeOnline(getRequest().getSession().getId());
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -