java web项目,登录后获取不到session,清缓存后再登录就能获取到,linux环境经常发生,请问是什么问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web项目,登录后获取不到session,清缓存后再登录就能获取到,linux环境经常发生,请问是什么问题?相关的知识,希望对你有一定的参考价值。

服务端已经写了清缓存的代码:
request.resp.setHeader("Cache-Control", "no-cache");
request.setHeader("Pragma", "no-cache");
rerequestetDateHeader("Expires", -1);
但是不起作用!
request.setHeader("Cache-Control", "no-cache");
request.setHeader("Pragma", "no-cache");
request.setDateHeader("Expires", -1);

你清除的是html文档的缓存,和session应该是没有关系的。
在浏览器里抓包看一下发出的请求头里的cookie,是否包含正确的JSESSIONID。追问

我抓包看了下,返回的code是304,应该是缓存的问题,又在后台加了:
java.util.Date date = new java.util.Date();
response.setDateHeader("Last-Modified",date.getTime());
不知道可不可以解决!

追答

304是ajax请求返回的吗?试试在URL后面加上随机数看看

追问

问题解决了,加上
//请求和响应的信息都不应该被存储在对方的磁盘系统中;
resp.addHeader( "Cache-Control", "no-store");,
//于客户机的每次请求,代理服务器必须想服务器验证缓存是否过时;
resp.addHeader( "Cache-Control", "must-revalidate");

参考技术A 更cookie有关,用safari访问默认是禁掉cookie,需要手动传递jsessionid,其他浏览器默认是不禁用cookie的 参考技术B 检查一下JSESSIONID

配置web项目session永不超时

众所周知,当用户登录网站后较长一段时间没有与服务器进行交互,将会导致服务器上的用户会话数据(即session)被销毁。此时,当用户再次操作网页时,如果服务器进行了session校验,那么浏览器将会提醒用户session超时。

下面说一下如何解决用户登录后较长时间未操作而导致的session失效的问题?

一般情况下下,我们首先想到的是,通过改变服务器的配置,延长服务器的session超时时间。
在Tomcat服务器和项目的的web.xml文件中有如下节点内容:

<session-config>
    <session-timeout>30</session-timeout>
</session-config>


这里的30表示session的超时时间,单位为分钟,如果用户登录后在30分钟内没有与服务器交互,那么当前用户的session将失效。我们可以配置一个更大的数值(比如60),就可以延长session的超时时间,如果将该值改为0或负数的话,则表示session永不失效。




以上是关于java web项目,登录后获取不到session,清缓存后再登录就能获取到,linux环境经常发生,请问是什么问题?的主要内容,如果未能解决你的问题,请参考以下文章

shiro session 怎样跳出整个web框架 返回到登录页面

web后台获取不到session中的值(loading sessions from persistent storage),后改用JS传值

Java,我做一个web项目的注销,怎么清除session里的值,

第一个Java web项目:员工管理系统

java web 验证用户是不是已登录都有哪些方式。

java web项目部署在linux系统出现第一次登录高延迟的问题