请教一个有关session的问题!

supnet1 2003-11-04 02:43:41
我的问题是:
在用户登录时使用什么方法判断该用户是否已经登录???
通过session好像不能取得值?总是报错!

在登录时该如何判断该用户是否已经登录???

非常感谢!今天结帖!!
...全文
77 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
haishen518 2003-11-05
  • 打赏
  • 举报
回复
up
jamesfay 2003-11-05
  • 打赏
  • 举报
回复
session 报什么错?
yixf 2003-11-05
  • 打赏
  • 举报
回复
up
supnet1 2003-11-05
  • 打赏
  • 举报
回复
谢谢各位指点!我自己调试一下!
Alan 2003-11-05
  • 打赏
  • 举报
回复
在校验是否已存在指定用户时,取出session中保存的信息,方法如下:
<%
//...
你用的数据容器=(SessionListen)session.getAttribute("listener").getUserList(); //其中getUserList();是自定义方法,你必须提供能够返回监听实例中存放的用户信息
//下一步校验当前正在登录的用户名是否已存在于用户信息数据容器中。
//...
%>
Alan 2003-11-05
  • 打赏
  • 举报
回复
你的意思是进行用户唯一性判断吧?
需要在第一个使用这个用户名登录的用户通过登录验证后,将该用户名保存在一个数据容器中(例如Vector、Collection等等),必须保证这个数据容器的生存周期是整个应用服务器的生存周期(例如usebean时定义scope="application")。
保存方法是HttpSessionBindingListener的valueBound记录监听过程中新的session,并比较当前数据容器中是否已经有同名用户存在,若存在则不再添加到数据容器中;同时在页面上也进行唯一性校验,若存在则拒绝此用户登录。
关于session监听的方法在论坛搜索一下即可。下面的是一个使用session监听器的方法:
<jsp:useBean id="sessionListener" class="你的session监听器" scope="application"/>
<%
//...
sessionListener.runSessionListen(添加你需要的信息); //对于每一个会话过程均启动一个监听器,例子中是个自定义方法runSessionListen启动监听事件
session.setAttribute("listener",sessionListener); //将监听器植入HttpSession,激发监听器调用valueBound方法,可以在此时记录日志文件
//...
%>
zhoucm990 2003-11-05
  • 打赏
  • 举报
回复
很简单,你可以写一个类,在你页面载入的时候验证这个session
例如WebLogin webLogin = (WebLogin)session.getAttribute("weblogion");
;if(webLogin==null) ...

而这个weblogin可以在login页面里放到session里去
如WebLogin weblogion= new WebLogin();
session.setAttribute("weblogion",weblogion);
wwwevil 2003-11-05
  • 打赏
  • 举报
回复
在数据库中记录登陆信息
然后查询登陆信息
supnet1 2003-11-05
  • 打赏
  • 举报
回复
to kongxiangli(笑看红尘):
谢谢!
可是我的问题是:如何在登录页面判断当前该用户是否已经登录了,目的防止有人窃取用户名和密码。
该如何判断?非常谢谢!
007james 2003-11-05
  • 打赏
  • 举报
回复
session.putValue
session.getValue

最好改成:

session.setAttribute();
session.getAttribute();
凋零的老树 2003-11-05
  • 打赏
  • 举报
回复
session.putValue("pkey",pkey);
session.putValue("pk",pk);
你也可以用Hashtable
Hashtable ht = new Hashtable();
for(int i=0;i<len;i++)
{
ht.put("pkey[i]",pk[i]);
}
session.putValue("pkht",ht);

//取消
session.invalidate() or session.removeAll()

<session-config>
<session-timeout>1500</session-timeout>
</session-config>

在你的jsp页面重新编译时(比如说修改了之后),
也就是中间件在重新编译的时候就可能会将session丢掉,
最笨的解决的办法就是重新修改页面后,自己将所有的页面访问一遍,
然后再重新登录就应该不会再丢session!

一般服务器的session超时时间是30分钟,可以在页面中设置session超时时间:
session.setMaxInactiveInterval(60*30);

在server.xml中查找
<Connector className="org.apache.catalina.connector.http.HttpConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"
acceptCount="10" debug="0" connectionTimeout="60000"/>
这一段,是否你的time设置的太小?有否做过改动??

在你的虚拟目录中的web.xml中..
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
要改成
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
2.2中还不能支持此标记,连filter都不支持,呵呵...

supnet1 2003-11-05
  • 打赏
  • 举报
回复
希望能提供源代码!
非常感谢!!
supnet1 2003-11-05
  • 打赏
  • 举报
回复
谢谢大家!回去要研究研究!请接分吧!
zn7726 2003-11-05
  • 打赏
  • 举报
回复
poppop(光盘)老兄的东东值得研究一下,以前没考虑过,谢了
fuzhan820 2003-11-05
  • 打赏
  • 举报
回复
up
Lihaitao312 2003-11-05
  • 打赏
  • 举报
回复
学习中
supnet1 2003-11-05
  • 打赏
  • 举报
回复
to jamesfay(James Fay)
报的错:session取不到值的错!
sunny110 2003-11-05
  • 打赏
  • 举报
回复
up
supnet1 2003-11-04
  • 打赏
  • 举报
回复
谢谢楼上两位!好像可以通过servletcontext来判断,但servletcontext该如何使用才能判断该用户是否已经登录??
谢谢
junyi2003 2003-11-04
  • 打赏
  • 举报
回复
session有时效的。
在部署你的web应用程序时,你可以用web.xml文件的<session-timeout>标签定义会话的超时的间隔。
也可以用session的setMaxInactiveInterval()来改变超时间隔。这些方法时间单位为秒。
如果超时间隔设为-1,则会话永不会超时
加载更多回复(1)

81,092

社区成员

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

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