session.setAttribute(UserOnLineListener.LISTENER_NAME,
new OnLineSession(request.getRemoteAddr(),u.getUserId().toString(),u.getUserAccount(),new Date().toString()));
//取出记入session监听的值
HttpServletRequest request = ServletActionContext.getRequest();
List sessions = UserOnLineListener.getSessions();
List<OnLineSession> sessionList=new ArrayList<OnLineSession>();
if(sessions!=null){
OnLineSession onlineSession = null; //封装登陆用户的对象
Iterator it = sessions.iterator();
while(it.hasNext()){
onlineSession=(OnLineSession)it.next();
sessionList.add(onlineSession);//登陆用户的工号
//System.out.println("用户登陆的工号的序号:"+onlineSession.getKeyId());
}
}
request.setAttribute("sessionList", sessionList);
在JSP中怎样判断在线离线
<s:iterator value="result.resultlist" var="user">
<!-- 页面级变量起控制做用 start 显示用户是否上下线问题 -->
<s:set name="onlineValue" value="0" />
<c:forEach items="${requestScope.sessionList}" var="online">
<c:if test="${online.keyId eq userId }">
<s:set name="onlineValue" value="1" />
</c:if>
</c:forEach>
<!-- 页面级变量起控制做用 stop -->
<s:if test="#onlineValue==1">在线</s:if>
<s:if test="#onlineValue!=1"> 离线</s:if>
用退出的时候也要清除一下session.removeAttribute(UserOnLineListener.LISTENER_NAME)这个,以及浏览器关闭的时候也要监听一下,将session值失效
浏览器关闭清除session值 javascript
/** 监听关闭浏览器的 清除session值 */
window.onbeforeunload=function()
{
var warnning = '<fmt:message key="systemMessage.exitWarning" />';
var beforeExit='<fmt:message key="systemMessage.beforeExitWarning" />';
if(event.clientY<0 && event.clientX>document.body.clientWidth-20 || event.clientY<0 && event.clientX<20 ||
event.altKey || event.ctrlKey || event.clientY>document.body.clientHeight){
//alert(beforeExit);
//return warnning;
window.location ='${basePath}companyManage/user!loginOut.action';//进入后台清除session值的操做
}
}
说明:这种情况也不能很是的准确,尤为是浏览器关闭的时候有可能触发不到,哎,大致上能够知足的,呵呵!!!不过在web.xml中设置一个session失效时间为30分钟便可