12

我正在用 JAVA 创建一个登录应用程序。我正在用 JSP 和 Servlet 中的所有逻辑(数据库连接)进行演示[这不是我知道的正确方法]。我在 Servlet 中检查用户名密码,然后创建一个会话变量。并像这样添加会话

sess.setAttribute("username",oName);

然后我将用户重定向到它的主页,比如 student.jsp

response.sendRedirect("student.jsp");

它删除了会话变量。我需要一种方法来保留会话变量并移至 student.jsp。我尝试使用转发,但没有成功。

RequestDispatcher dispatcher =
                getServletContext()
                    .getRequestDispatcher("/student.jsp");

            if (dispatcher != null) {
                dispatcher.forward(request, response);
            }

它转发请求,但页面地址不会更改为 student.jsp,这不好。在这方面的任何帮助将不胜感激谢谢

4

4 回答 4

7

为了使重定向的请求返回并附加到同一个会话,它需要一个会话 ID,通常在 JSESSIONID(或其他名称)cookie 或 URL 中作为参数携带。

此 cookie 或 URL 参数应由 servlet 容器添加,您不必自己添加。

如果您没有在浏览器中看到 cookie,并且您没有将 JSESSIONID 附加到 URL,那么它正在为每个请求创建一个新会话,而不是附加到同一个会话。

于 2012-11-19T21:49:44.780 回答
0

尝试编辑您的 tomcat文件并将标签context.xml替换为,这对我有帮助。<Context><Context useHttpOnly="false">

于 2017-04-28T10:55:06.363 回答
0

某些浏览器(例如 Chromium)不允许来自本地主机或 IP 地址的 cookie,因此无法保留会话并在每次刷新时更改。这可以使用显示请求的所有 cookie 的浏览器开发工具轻松检查。

对于开发,设置您的工作站以将一些更重要的名称(如 host.kitty.com)解析为 localhost。在 Linux 下,只需将条目添加到 /etc/hosts。

于 2019-12-05T15:06:53.933 回答
-1

使用RequestDispatcher并使用 设置您的用户名变量request.setAttribute()。在这种情况下,调度程序不会创建新请求,但将使用该forward()方法转发相同的请求。

于 2013-01-10T16:35:45.450 回答