gpt4 book ai didi

java - 如何正确地使 JSP session 失效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:38 24 4
gpt4 key购买 nike

所以问题来了。当用户退出我的网站时,他们仍然可以点击后退按钮继续使用该网站。为了跟踪用户是否登录,我创建了一个 session 属性“isActive”。该属性在用户登录时设置为 true,并在注销时 session 失效之前(冗余地)被删除。同样在每个页面上,我检查该属性是否存在。

我还指定页面不应缓存在它们的 head 标记中。

尽管如此,用户仍然可以在浏览器上进行反击,并继续使用该网站,就好像他们从未注销过一样。

知道如何解决这个问题吗?

代码如下:

登录 Servlet:

...
session.setAttribute("isActive", true);
//Redirect to home page.

检查已登录的 JSP:

<c:if test='${empty sessionScope.isActive || sessionScope.isActive != true}'>
<c:redirect url="/index.jsp?message=Session Timed Out."/>
</c:if>

注销 Servlet:

request.getSession().removeAttribute("isActive");
request.getSession().invalidate();
response.sendRedirect("index.jsp");

内部头部标签:

<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="Sat, 01 Dec 2001 00:00:00 GMT">

谢谢

最佳答案

元标记不够。您需要将它们添加为完全有值(value)的响应 header 。网络浏览器依赖于它们。 Filter 对此很有帮助。此外,Cache-Control header 不完整(在 Firefox 等中无法按预期工作)。

FilterdoFilter() 方法中实现它,它映射到 url-pattern 例如 * .jsp(如果你想覆盖所有的JSP页面)。

HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
res.setHeader("Pragma", "no-cache"); // HTTP 1.0.
res.setDateHeader("Expires", 0); // Proxies.
chain.doFilter(request, response);

这样,网络浏览器将被迫在服务器上触发一个真正的请求,而不是从浏览器缓存中显示页面。此外,您应该使用 Filter 来检查登录用户的存在,而不是 JSP/JSTL。

相关问题:

关于java - 如何正确地使 JSP session 失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com