Jsp和Servlet共享session的问题

来源:百度知道 编辑:UC知道 时间:2024/09/26 13:43:41
莫名奇妙:
我的环境是:tomcat6.0.18,JDK是:1.6
有一个登录页面:
index.jsp的action为/servlet/login,Servlet的就是处理提交过来的参数,验证登录(sessionId打印是在未跳转之前).
有个问题出现了,jsp中的sessionId和Servlet中的SessionId不一样:
测试情况:
/servlet/TestServlet;jsessionid=742B09E109EB2FA60B31D43353C3F2CB(页面的SessionId)
URL(判断是否是:isRequestedSessionIdFromURL())
Servlet中打印出来的SessionID:B19816302C76120319BE50B409C902B7
Servlet中获得Session是通过request.getSession();如果getSession(false),就会有空指针的错误.
参考文档,这两个session应该是同一个Session,但是现在情况是如果调用request.getSession()在servlet中就会返回一个新的session,实际上这个新的session没有什么用处.
希望知道原因的朋友帮着解释一下.
谢谢!
我的业务逻辑就是:
index.jsp用户输入用户名和密码以后,提交到servlet上验证,并把用户用户名保存在session中,在其他的页面中调用该session中的属性,用于判断用户是否登录.servlet只是负责验证,具体的的验证方法放在bean中.所以理论上说这个session就是jsp中创建的.但是SessionId不同,就不是同一个session.在网上好多例子都是说servlet中request.getSession().但是他们没有讲到如果session也在别的jsp页面上调用,就不会是一个session了.非常感谢 jrj2330345 ;

这种情况 ,你应该说下你的业务逻辑
如果我没猜错的话 , 楼主 是想把这个session 当做 缓存,把信息封装后等待随时调用缓存的参数 , 然后在servlet中处理这个缓存的属性吧?

如果是的话, 你这个“缓存” 和Servlet 中 的session没有关系
session 做缓存的思路是 session.setAttribute();
然后把这个session 放到jsp页面(servlet容器)。 获得参数的页面包含这个pag 。然后 seesion。getAttribute() 就可以获得缓存中的参数。

如果不是,顺便提一下 ,关于seesion, 它有自己的属性seesionId 是身份标示,如果不复写该方法 理论上你永远不能让你上面所说的逻辑实现。

补充 。 那就是我说的 session做缓存的技术了。
验证登陆后 获取登陆人的 相关信息 判断是否居于哦该权限, 现实登陆的人的名称密码的 相关操作, 登陆验证可以用session 和cookie实现。

说下思路 , 登陆验证后, 返回一个包含该用户全部权限和属性的对象user后

request.getSession().setAttribute("user");

另外建 一个 jsp 页面 loginSession.jsp 主要代码为:

request.getSession().getAttribute("user");

然后 在你要判断的 页面 引入 loginSession.jsp 页面

直接 user = (User)request.getSession().getAttribute("useru") ;
判断 user对象 ,就可以 确定是否user属性 为可否访问该页面的属性

跳转方式不要用redirect 用forward