【发布时间】:2015-10-04 10:53:10
【问题描述】:
我一直在构建一个 Web 应用程序,到目前为止我已经实现了登录和注册。用户可以注册,然后可以在 Web 应用程序中登录。一切正常。我正在做的是当用户单击Login 按钮时,正在调用一个servlet,我正在检查凭据是否正确,如果验证,则将isLoggedIn 保存在HttpSession 中并将其重定向到Home Page。
LoginServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
boolean isValidated = false;
... // Service Layer is invoked here and checks for user validation
// Assume isValidated to be true
if(isValidated){
HttpSession session = request.getSession();
session.setAttribute("isLoggedIn", Boolean.valueOf(true));
...
// redirected to /home
}else{
// redirected to /login?invalid
}
}
HomeController.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
HttpSession session = request.getSession();
Boolean isLoggedIn = (Boolean) session.getAttribute("isLoggedIn");
if(isLoggedIn != null && isLoggedIn){
...
// Service Layer is invoked to fetch `Home Page Data`
}else{
// redirected to /login?expired
}
}
突然间我遇到了一个奇怪的问题,如果我使用 FireBug 禁用 localhost 的 cookie,我将无法再登录。无论我每次被重定向到/login?expired时是否输入正确的用户名或密码。
不明白,cookies是存储在client端,Session是存储在server端,那么为什么禁用cookies就不能设置session属性。
我已经尝试在 Spring-MVC 中为已经构建的 Web 应用程序禁用 Cookie,该应用程序正在生产中并且在那里也存在相同的问题。
【问题讨论】:
-
除了通过 cookie 外,您希望如何跟踪会话?会话 ID 存储在 cookie 中。
-
你的视图框架是什么?
-
我正在使用简单的 servlet 和 jsp
标签: java session servlets cookies