昨天在用session存取数据的时候发现无论如何都取不到数据。
当我刷新页面的时候,sessionid每次都改变了这是不科学的,因为session默认是30分钟过期。
java取session的代码:
HttpSession session = request.getSession();
这个代码的意思的:这段代码会判断服务器在该客户端是否有session,如果有就取出这个session返回,如果没有就新建一个session返回,也就是无论无何都会取到session。
我建立了两个Sevlet一个来存一个session,一个用来取session的内容,按道理说是没有问题的,但是我测试了很多次就是取不到。
tomcat web.xml文件里面默认配置了session的过期时间时30分钟,按道理来说不会过期的呀。但是我还是怕万一,在我自己的项目web.xml配置了session时间:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
注:这里可能有人会说可以用代码去设置session的过期时间,但是基本没人这么用,一般都是去配置。所以我这里也不写了。
但是我这么配置了还是不行,百度了很多还是无法解决问题。
我打开火狐的web开发者,去看了响应头,发现set-Cookie 里面的path出问题了,我的项目名中有一个字符是 & ,但是在path里面被翻译成了 % ,然后我再次建了一个工程这个工程名没有特殊字符。session这次没问题。我也可以取到我自己设置了session。
所以如果你遇到session立马过期的问题,并且你的session配置时间是足够的。那么你可以检查一下你的项目名是否有问题啦。
这里再提一个其他的问题,就是session过期时间是30分钟,但是我们关闭了浏览器再次访问就取不到session了。
因为session是基于cookie的只要把cookie持久化就好了,附上代码:
String id = session.getId();//该session对象的编号id
//手动创建一个存储JSESSIONID的Cookie 为该cookie设置持久化时间
Cookie cookie = new Cookie("JSESSIONID",id);
cookie.setPath("/xxxx"); //xxxx表示项目名
cookie.setMaxAge(60*10);