先说问题: 就是做JavaWeb项目的时候,session总是出问题,登录进去之后,在后台把用户名存入session,然后跳转到另一个页面,在这个页面的session还是没问题的,但是从这个页面再次跳转到其他页面或者其他的Servlet或者Action,session就会消失,也可以说重置,查看session id 的话会发现,session id 已经改变,并且更甚的是,每次登录的session id 也不一样,给人一种错觉就是整个session都是不好的,唉!
为了满足各种正在焦急的童鞋,先说这种问题的原因所在: 其实,原因很简单,就是项目名字的问题,或者是用了某个符号,或许是用了中文。所以,只要把建项目时候把名字定义为英文即可,当然最好不要直接在原来的项目里修改,因为修改后发布之后(我用的Tomcat)后的项目名称没有变,也可以直接修改发布后的项目文件夹名字(就是发布到服务器地址的里面的文件夹),这个不多说了,主要原因知道后,什么都好办。
下面简单说下自己在跟这个问题做斗争的过程,感兴趣的看看咯: 这个问题是在去年学校让做课程设计时候遇到的,当它出现这个问题的时候,我一度觉得是我对session了解的太少(其实真的了解的不多),我认为session可能不是指的我理解的那种会话,然后就是各种查找session的资料,一直到去年那个课程设计结束,这个问题都没解决。那个时候是第一次接触JavaWeb项目,没有用任何框架,全部都servlet+jsp,最完整的Dao模式,感觉那时候最先进的一点儿就是在servlet里面用到了反射,实现了一个servlet可以处理多个方法,如今自己学习了Struts2框架,看到了<action>里面配置的method属性时候,感觉到这其实就是那是我用到的反射啊。那时候也觉得用Struts2可能会解决session这个问题,但这年开始,多少学点儿struts2后,用struts2做现在这个小项目的时候,忽然发现还是不行。顿时,整个人都不好了,那时候就在心里对自己说了,一定要解决这个问题,并且要把这个发成博客。其实,我在各种尝试的时候,我都又做了一个新的小型的项目作比较,就比如这次的我专门做了一个小的Web项目,里面有一个登陆页面,登陆后进入一个action,返回到two.jsp页面,在two.jsp里面有一个超链接,链接到three.jsp,之后里面还有一个链接,链接到four.jsp,然后在action以及之后的每一个页面中都取得session id 来进行比较,然后很惊喜的发现,所有的session id 都是一样的,根本没有任何问题,然后我一度认为会不会是CSS样式之类的问题,后来就把原来的项目一点儿一点儿得往精简去改,终于,改成了基本跟测试的小项目一样的东西,还是不行,唉,各种无语,各种懊恼,就在那无意中,想到,会不会是项目名称的问题,唉。总算是拨开了云雾,守得云开见月明!
哈哈,说了好多废话,只因这是第一次发博客,加上解决了困扰我好长时间的一个问题,比较兴奋,有好多问题我都还不是很清楚,好多涉及到专业知识的我还没搞清楚,毕竟还只是个小白,喜欢看到的能够指出问题,也希望大神能解释下问什么在项目名字中加了一个符号&session就会一直变,难道是解析的时候当成不是一个项目了么?等待大神的解答,谢谢大家!
|