请教如何通过sessionId得到session对象,并使之失效。

wdman 2002-09-26 03:55:13
小弟现在做一个身份认证的程序,为了避免一个用户同时登陆多次,想这个用户第二次登陆时把他第一次登陆时建立的session失效,所以要得到他第一次登陆时的session对象,
我这样做的:
String SessionId = "";//"从数据库中得到";
HttpSessionContext SessCon= request.getSession(false).getSessionContext();
HttpSession Sess = SessCon.getSession(SessionId);
Sess.InValidate();//这个函数的具体名字在发问的时候忘了

上面的代码在jsp中运行,出现错误,说我使用了该批判的method getSession(String id),我不知道该如何是好。大家帮帮忙吧,你们做过类似项目没有?你们是如何实现这个问题的?
...全文
7814 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdman 2002-09-26
  • 打赏
  • 举报
回复
我在application中要设置一个用户信息数组,每次使用session时都要查询我的applicaton中的数组吗?数组的大小如何设定,还是用hashtable?
wdman 2002-09-26
  • 打赏
  • 举报
回复
我明白你的意思,但是每个用户都要往application中写数据,那肯定不能用一个变量来记录某个数据,比如:username,只有一个变量如何记录那么多用户名呢?就是剩下这么一个问题呢,你明白我的意思吗?
careless 2002-09-26
  • 打赏
  • 举报
回复
你地明白?
careless 2002-09-26
  • 打赏
  • 举报
回复
我所说的application对象解决方法只供参考,当然,还有其他方法。
我们要解决的是两个session之间的协调问题,即:如果两个session由同一个人用户登录产生的,那么将前一个登录产生的session失效。
我们可以在登录时将用户名、登录时间、session ID等信息记入application对象中,用户注销时将信息删除。由于application的特点,对象中的信息是整个项目中的所有程序都可以访问的,所以第二次登录的时候,到查询application中查询该用户是否已登录,如果发现该用户已登录(登录尚未没超时),则将前一次登录时记录的那条application信息打上无效记号,当然,后来这次登录的信息也要写入application。

下面只剩下一个问题了:即,使已经打上无效记号的application中的session ID失效! 这个问题应该很好办了吧,每次用到session的时候只要到application里检测一下自己的session是否被打上了无效记号。

wdman 2002-09-26
  • 打赏
  • 举报
回复
那该如何解决我说的问题呢?
upc_chenli 2002-09-26
  • 打赏
  • 举报
回复
现在由于安全的原因,已经不再支持这种方法了。

可以设想一下,用户的一些信息都保存在Session中,我们在开发时留个后门,用户的资料就可以到我们手中了(他的密码,信用卡号..)。

本来可以通过Interface HttpSessionContext
但是现在:Deprecated. As of Java(tm) Servlet API 2.1 for security reasons, with no replacement. This interface will be removed in a future version of this API.
wdman 2002-09-26
  • 打赏
  • 举报
回复
to careless(深潭静水) :
为什么我给出了sessionid,却不能用SessCon.getSession(SessionId)得到这个session呢?
wdman 2002-09-26
  • 打赏
  • 举报
回复
我是想通过sessionid得到这个session对象,不是说通过session传递参数,也就是说,我每产生一个session,都把他的sessionid存到一个表中,我可以在另外的地方,通过这个sessionid,得到这个session对象。

to careless(深潭静水) :
用application如何得到session对象呢?
也就是说我就是要操作session对象。
careless 2002-09-26
  • 打赏
  • 举报
回复
SessCon.getSession(SessionId);

SessCon是HttpSessionContext对象,它的getSession()方法当初用来返回与某个session id相关的session。现在返回空值。
所谓“该批判”的意为不建议的,Java为了出于安全考虑,在后期版本中停止了对该接口的支持。
careless 2002-09-26
  • 打赏
  • 举报
回复
我觉得session之间是相互独立的,从一个session或request对象中取得另一个session对象好像不太可能。如果要我做的话,我会选择用application对象。
shidu 2002-09-26
  • 打赏
  • 举报
回复
HttpSession Sess = SessCon.getAttribute(SessionId);
kare 2002-09-26
  • 打赏
  • 举报
回复
String uid = (String)session.getValue("uid");
session.invalidate();
linquan333 2002-09-26
  • 打赏
  • 举报
回复
用getAttribute(String id);

62,635

社区成员

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

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