【问题标题】:Jsp not setting session variable after form submission表单提交后Jsp没有设置会话变量
【发布时间】:2014-08-24 14:52:45
【问题描述】:

我有一个简单的登录表单,在 jsp 中,单击该表单时会检查用户并通过设置一个名为 loggedIn 的会话变量来登录。

在我最初提交登录表单后,它似乎设置了会话变量,因为它显示“您已登录”。文本。但是,如果我在使用正确的登录详细信息提交登录表单后重新加载页面,它会再次显示登录表单!

我对@9​​87654322@ 会话的检查是否正确?

这里是servlet代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" import="com.servlet.explore.*, java.util.*, java.io.*" %>
<%
boolean isValid = false;
if(request.getParameter("loginSubmit") != null){
    String username = request.getParameter("username").trim();
    String password = request.getParameter("password").trim();

    // insert hashed password and username
    LoginController cc = new LoginController();
    password = cc.hashPassword(password);
    // check details are valid
    isValid = cc.checkUser(username, password);

    // if login details are valid set the session variable loggedIn to true
    if(isValid){
        session.setAttribute("loggedIn", "true");
    }
}

这是 HTML 页面:

%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Admin</title>
<link rel="stylesheet" href="css/main.css" type="text/css">
</head>
<body>

        <%
            // is the user logged in?
            if(session.getAttribute("loggedIn") != null){
                out.println("You are logged in.");
            }else{
                out.println("<form class=\"boxShadow\" id=\"loginForm\" name=\"loginForm\" action=\"admin.jsp\" method=\"POST\">"+
                        "<p>You must login to view this page</p>"+
                        "<input type=\"text\" name=\"username\" placeholder=\"username\" required>"+
                        "<input type=\"password\" name=\"password\" placeholder=\"username\" required>"+
                        "<input type=\"text\" name=\"botCatcher\" class=\"botCatcher\" placeholder=\"username\">"+
                        "<input type=\"submit\" name=\"loginSubmit\" value=\"submit\" id=\"loginSubmit\">"+
                        "</form>");
            }
        %>
</body>
</html>

当我使用本地 Tomcat 服务器通过 eclipse 运行 jsp 时,不会出现此问题。仅当我在远程 Tomcat 服务器上发布应用程序时。

编辑:添加了一些日志 catalina.out

2014 年 7 月 3 日下午 4:01:43 org.apache.catalina.startup.HostConfig deployWAR INFO:部署 Web 应用程序存档 /usr/local/apache-tomcat-7.0.47/webapps/chrissepham.war 2014 年 7 月 3 日 下午 4:15:32 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE:Web 应用程序 [/chrissepham] 注册 JDBC 驱动 [com.mysql.jdbc.Driver] 但未能 当 Web 应用程序停止时取消注册。为了防止一个 内存泄漏,JDBC驱动被强制注销。 7月03日, 2014 下午 4:15:32 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE:Web 应用程序 [/chrismepham] 似乎已经启动了一个名为 [Abandoned connection cleanup thread] 但未能阻止它。这很可能会创建一个 内存泄漏。 2014 年 7 月 3 日下午 4:15:33 org.apache.catalina.startup.HostConfig deleteRedeployResources 信息: 取消部署上下文 [/chrissepham] 2014 年 7 月 3 日下午 4:16:36 org.apache.catalina.startup.HostConfig deployWAR 信息:部署网络 申请档案 /usr/local/apache-tomcat-7.0.47/webapps/chrissepham.war 2014 年 7 月 3 日 下午 4:28:11 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc SEVERE:Web 应用程序 [/chrissepham] 注册 JDBC 驱动 [com.mysql.jdbc.Driver] 但未能 当 Web 应用程序停止时取消注册。为了防止一个 内存泄漏,JDBC驱动被强制注销。 7月03日, 2014 下午 4:28:11 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVERE:Web 应用程序 [/chrismepham] 似乎已经启动了一个名为 [Abandoned connection cleanup thread] 但未能阻止它。这很可能会创建一个 内存泄漏。 2014 年 7 月 3 日下午 4:28:12 org.apache.catalina.startup.HostConfig deleteRedeployResources 信息: 取消部署上下文 [/chrismepham] 2014 年 7 月 3 日下午 4:28:50 org.apache.catalina.startup.HostConfig deployWAR 信息:部署网络 申请档案 /usr/local/apache-tomcat-7.0.47/webapps/chrissepham.war

【问题讨论】:

  • 您的浏览器cookie启用了吗?
  • 远程 Tomcat 服务器的日志会很有用,你能把它添加到问题中吗?
  • 我添加了 catalina.out 日志。我还创建了一个测试网络应用程序,它似乎可以很好地设置会话变量。是否有一些设置或我可能在 Eclipse 中设置的东西会停止此应用程序上的会话?

标签: java forms jsp session login


【解决方案1】:

这里有几件事要检查(您可以尝试添加日志.. 大量日志)

  1. 浏览器是否缓存了 HTML 输出并再次显示相同的内容? (点击浏览器重新加载时服务器日志不会有新行)
  2. JSP 在部署时被编译为 servlet。因此,如果重新部署不正确,旧的 servlet 可能正在运行。尝试重新启动远程 tomcat 或使用管理控制台停止和启动应用程序。

ATB..

【讨论】:

  • 我现在有 2 个 webapp 正在运行,1 个可以正常工作,另一个不能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
相关资源
最近更新 更多