0

我有一个简单的jsp登录页面,我正在尝试实现“记住me2功能。jsp的页面代码:

 String username = "";
    Cookie[] vec = request.getCookies();
    for(int i=0; vec!=null && i<vec.length; i++)
    {
        if(vec[i].getName().equals("userNameCookie")&&!vec[i].getValue().equals(""))
        {
            username = vec[i].getValue();
        }   
    }

表单参数被发送到 servlet 控制器,控制器创建 cookie 并将其添加到响应中,然后控制器将请求转发到其他页面。

我的问题是,返回登录页面后,控制器添加到响应中的 cookie 不存在。实际上,cookie 存在于控制器将请求转发到的页面中。

这是控制器的代码:

String username = request.getParameter("username");
            String password = request.getParameter("password");
            Cookie cookie = new Cookie("userNameCookie", username);
            cookie.setMaxAge(7 * 24 * 60 * 60);
            response.addCookie(cookie);
getServletConfig().getServletContext().getRequestDispatcher("/WEB-INF/products.jsp").forward(request, response);

我究竟做错了什么?

谢谢!

4

2 回答 2

2

You must probably specify a path for your cookie. IIRC, if you don't specify one, the cookie is only valid for the URL the cookie comes from.

Also, your remember-me cookie is really insecure. Any user could authenticate himself as someone else by simply sending a cookie with the other user's name. You should make the cookie random and very hard to guess, and associate each random cookie with the user it has been generated for, in the database.

于 2013-01-06T15:16:01.380 回答
0

用户第一次发送请求消息时,您在servlet中创建的cookie已经存储在响应对象中,而不是在jsp中的请求对象中。您无法从 servlet 转发到的 jsp 中的请求对象中获取 cookie。因为 Web 容器在向客户端代理发送响应消息之前处理转发。客户端在收到响应消息时只存储 cookie。

如果客户端重新发送请求,也许它会完成。

于 2013-01-06T15:31:55.117 回答