Cookie仅在返回的页面上可用,而不在其他页面上

时间:2013-01-06 15:05:41

标签: java jsp servlets

我有一个简单的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);

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:2)

您的Cookie必须specify a path。 IIRC,如果您没有指定,则cookie仅对cookie来自的URL有效。

另外,你记得我的饼干真是不安全。任何用户都可以通过简单地发送带有其他用户名称的cookie来将自己认证为其他人。您应该使cookie随机且非常难以猜测,并将每个随机cookie与数据库中生成的用户相关联。

答案 1 :(得分:0)

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

如果客户重新发送请求,可能会完成。