怎么用session保存用户登录信息,在所有的servlet中都能获取到session中的值,我试过,输出session的Id不同

servletA:HttpSession session = request.getSession(); session.setAttribute("id", id);
servletB:HttpSession session = request.getSession(); session.getAttribute("id");得到的值正确
servletC:HttpSession session = request.getSession(); session.getAttribute("id");得到的值为空null;
B和C的区别就是A跳到B,而没有跳到C;

session的作用范围是一个会话内。
正常情况下,先执行servletA,往session中设置id的值。然后调用servletB和servletC,都可以得到这个值。(除非调用servletC时用的是另外一个浏览器,比如前面用IE,后面用火狐,呵呵)。
注意前后顺序,先A,然后再其他。有时间多刷新几次servletC,应该没问题的。追问

不在servletA中调用B和C呢?单独使用B和C不行吗

追答

可以。但要在同一个浏览器里。比如调完A之后,直接改写URL,调B或者C都可以。不一定要用跳转。

追问

改写Url后session中获取的Id为空

追答

我测试了,没有问题,一切正常。你再看看是不是其他地方配错或有问题吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-08
使用HttpSession共享的对象仅在会话的生存期中可被访问,而使用ServletContext共享的对象在web应用程序的生存期中可被访问。你可以通过ServletContext的setAttribute方法保存信息。
第2个回答  2012-05-08
你从A跳转到B 也得从B跳转的C啊追问

在servletA中保存了登录用户信息,进入了主页面index.jsp
在index.jsp页面中可使用用户名
在index.jsp页面中想查看用户信息,执行servletC,获取用户信息,但却显示未登录

追答

.你必须先执行过最少一次
HttpSession session = request.getSession(); session.setAttribute("id", id);
这样你的session的属性里才会有值 才能用session.getAttribute取到值
还有说道用户登录 jsp关于用户信息可以全靠web.xml配合容器的xml文件完成 不需要写一行java代码(当然用数据库保存就是另外一说了)

相似回答