我有一个简单的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);
我做错了什么?
谢谢!
答案 0 :(得分:2)
您的Cookie必须specify a path。 IIRC,如果您没有指定,则cookie仅对cookie来自的URL有效。
另外,你记得我的饼干真是不安全。任何用户都可以通过简单地发送带有其他用户名称的cookie来将自己认证为其他人。您应该使cookie随机且非常难以猜测,并将每个随机cookie与数据库中生成的用户相关联。
答案 1 :(得分:0)
在用户第一次发送请求消息时,您在servlet中创建的cookie已存储在响应对象中,而不是存储在jsp中的请求对象中。你不能从你的jsp中的请求对象获取cookie,而servlet转发到。因为Web容器在向客户端代理发送响应消息之前处理转发。客户端只在收到响应消息时存储cookie。
如果客户重新发送请求,可能会完成。