gpt4 book ai didi

java - 如何保持 session 属性

转载 作者:行者123 更新时间:2023-11-28 23:08:04 25 4
gpt4 key购买 nike

我有一个“查找”html 页面,它与处理某些功能并将结果发送到 jsp 页面的 java HttpServlet 类一起工作。

要执行查找,我需要一个 loginresult 对象,我将其放入不同 servlet 的 session 中。

这是登录 servlet 中发生的事情:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// get attributes that were filled in on the login webpage
request.getAttribute("username");
request.getAttribute("password");
String username = request.getParameter("username");
String password = request.getParameter("password");
LoginManager loginManager = new LoginManager(username.trim(), password.trim());
if (loginManager.doLogin() == true) {
javax.servlet.http.HttpSession session = request.getSession();
session.setAttribute("loginResult", loginManager.getLoginResult());
session.setAttribute("binding", loginManager.getBinding());
response.sendRedirect("lookup.html");

这是查找 servlet 时发生的事情

request.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
javax.servlet.http.HttpSession session = request.getSession();
LoginResult lr = (LoginResult) session.getAttribute("loginResult");
if(lr == null)
{
throw new Exception("Your session has expired, please log in again");
}

// some look up code

RequestDispatcher dispatcher = request.getRequestDispatcher("result.jsp");
request.setAttribute("result", result);
request.setAttribute("question", question);
request.setAttribute("xml", xml);
dispatcher.forward(request, response);

在我的 jsp 页面中有一个输入按钮,它执行以下操作:ONCLICK="window.location.href='lookup.html'"/>

有时,当我离开我的结果页面时没有聚焦或最小化或其他原因,或者我等待时间过长,然后单击返回到查找页面时,我的登录结果对象似乎 == null。所以在我看来它似乎已经过期了。尽管我认为 Apache Tomcat 服务器将 session 保持标准状态 30 分钟。

猜猜为什么我的 session 属性消失了?

最佳答案

首先,您应该确定您是否真的获得了相同的 session 。我可以想到两种简单的方法来做到这一点。

1.) 查看 JSESSIONID cookie 的内容。大多数浏览器使这变得微不足道。如果内容发生变化,您将收到不同的 session 。

2.) 您可以尝试插入一个 HttpSessionListener 来记录您的 session 何时被销毁。

如果您获得新 session ,则必须将其缩小为配置问题(Tomcat、web.xml、上下文片段等)或应用程序问题。如果是配置问题,则该问题应该会在您提到的页面以外的其他页面上重复出现。

还可以考虑使用 getSession(false),如果 session 不存在,它不会创建新 session 。如果您从中得到 null,则表明您的 session 超时。

如果您确定您有相同的 session ,但由于某些奇怪的原因属性正在消失,您可以实现一个 HttpSessionAttributeListener 并在项目从 session 中删除时记录或断点。

关于java - 如何保持 session 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555606/

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