怎么样取得Session的值(在监听session实现一个接口中)?

Bruce2008 2005-02-21 09:08:37
JSP页面中设置Session的值
<%
session.setAttribute("SysUserID","25");
%>

监听session实现一个接口HttpSessionListener
public class OnlineCounter implements HttpSessionListener
{
public void sessionCreated(HttpSessionEvent hse)
{
//怎么在此处取得Session(SysUserID)的值
}

public void sessionDestroyed(HttpSessionEvent h)
{

}
}
...全文
332 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bruce2008 2005-02-21
  • 打赏
  • 举报
回复
对,我刚才也被迷惑了。
你讲得对,它只是针对一个用户的!
我现在完全明白了!
jFresH_MaN 2005-02-21
  • 打赏
  • 举报
回复
看来你还没有看懂我的代码
session.setAttrbite("startTime",new Date);是针对某一个用户的,每一个用户都是不一样的啊

在sessionDestroyed()方法里面
session.getAttribute("startTime");是针对超时的用户
我先取出name,然后根据name把相应的时间写入数据库啊
Bruce2008 2005-02-21
  • 打赏
  • 举报
回复
这个问题如果好解决,可以用 ID+startTime 来解决
108041217 2005-02-21
  • 打赏
  • 举报
回复
jFresH_MaN的好像有問題,當多個用戶使用時都調用session.setAttrbite("startTime",new Date);
不會覆蓋startTime的值嗎,哈哈.一個用戶是沒有問題的,多個用戶有問題了.
trazan 2005-02-21
  • 打赏
  • 举报
回复
就如jFresH_MaN(The answer is ......) 说的。
在session产生的时候就要把用户信息写进session里面,这样才能在以后得到session对应的用户吧。
Bruce2008 2005-02-21
  • 打赏
  • 举报
回复
to : jFresH_MaN(The answer is ......)

谢谢你,我试一下!
dongcenphoenix 2005-02-21
  • 打赏
  • 举报
回复
mark
jFresH_MaN 2005-02-21
  • 打赏
  • 举报
回复
可以的
我的意思是这样
用户登陆的同时,你把时间记下来
注意::不在这个接口里面操作
session.setAttibute("username","xxx");
session.setAttrbite("startTime",new Date);

在接口里面的sessionDestroyed()方法里面
对于每一个session,
String name=h.getSession.getAttribute("userName");
Date start=(Date)h.getSession.getAttribute("startTime");
date current=new Date();
.....//这里就可以根据用户名写入数据库了
Bruce2008 2005-02-21
  • 打赏
  • 举报
回复
to : jFresH_MaN(The answer is ......)

能详谈一下吗?
我的QQ 275829337 MSN dl520ss@hotmail.com

我下个月要交了,希望能得到你的帮助!!
谢谢!
Bruce2008 2005-02-21
  • 打赏
  • 举报
回复
to : jFresH_MaN(The answer is ......)

获取时间
public class OnlineCounter implements HttpSessionListener
{

public void sessionCreated(HttpSessionEvent hse)
{
Date pobjDate = new Date();
startTime = pobjDate.getTime();
}

public void sessionDestroyed(HttpSessionEvent h)
{
Date pobjDate = new Date();
endTime = pobjDate.getTime();
}

public static String getOnline()
{
long margin = (endTime-startTime)/(1000*60);
return margin;
}
}
但我要把这个时间,放入到数据库中,每次登录的时间我都要记下来
但我怎么样确定是哪一个用户的登录时间呢?

希望能指点一二?(分数不够可以再加)
jFresH_MaN 2005-02-21
  • 打赏
  • 举报
回复
简单啊!
监听session实现一个接口HttpSessionListener
public class OnlineCounter implements HttpSessionListener
{
public void sessionCreated(HttpSessionEvent hse)
{
刚刚创建一个session的时候
session.setAttibute("startTime",new Date());
}

public void sessionDestroyed(HttpSessionEvent h)
{

}
}
用户退出的时候
session.getAttibute("startTime");
Date current=new Date();
//减一下就行了
Bruce2008 2005-02-21
  • 打赏
  • 举报
回复
to : jFresH_MaN(The answer is ......) (

那怎么样才能确定是哪一个用户呢?

好比说,我统计一个用户的在线时间
jFresH_MaN 2005-02-21
  • 打赏
  • 举报
回复
第一个session是针对某一个用户的session的
而监听器里面得到的是刚刚创建的session,所以是不一样的
xxj123x 2005-02-21
  • 打赏
  • 举报
回复
给你一段代码,这段代码是监听session,记录当前在线人数,实现的是HttpSessionAttributeListener接口,取得jsp页面session中存入的ip.

import javax.servlet.*;
import javax.servlet.http.*;
import com.hmkt.javabean.*;

public class SessionCount implements HttpSessionAttributeListener
{

private static int activeSessions = 0;

public void attributeAdded(HttpSessionBindingEvent se)
{
if("ip".equals(se.getName()))
{
String ip = (String)se.getValue();
//System.out.println(ip + "******");
activeSessions++;
}
}

public void attributeRemoved(HttpSessionBindingEvent se)
{
if(activeSessions > 0)
activeSessions--;
}

public void attributeReplaced(HttpSessionBindingEvent se){}

public static int getActiveSessions() {
return activeSessions;
}
}
Bruce2008 2005-02-21
  • 打赏
  • 举报
回复
hse.getSession().getAttribute("SysUserID")

这样取出来的值是 null


以梦为马 2005-02-21
  • 打赏
  • 举报
回复
up
jFresH_MaN 2005-02-21
  • 打赏
  • 举报
回复
public void sessionCreated(HttpSessionEvent hse)
{
//怎么在此处取得Session(SysUserID)的值
hse.getSession().getAttribute(.....);
}

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧