我有一个简单的jsp登录页面,我正在尝试实现“记住我2”功能。 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 Controller , Controller 创建cookie并将其添加到响应中,然后 Controller 将请求转发到其他页面。
我的问题是,返回登录页面后, Controller 添加到响应中的 cookie 不存在。事实上,cookie 存在于 Controller 将请求转发到的页面中。
这是 Controller 的代码:
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);
我做错了什么?
谢谢!
最佳答案
你可能必须specify a path为了你的 cookies 。 IIRC,如果您不指定,则 cookie 仅对 cookie 来源的 URL 有效。
此外,您的“记住我”cookie 确实不安全。任何用户都可以通过简单地发送带有其他用户名的 cookie 来验证自己的身份。您应该使 cookie 随机且很难猜测,并将每个随机 cookie 与数据库中为其生成的用户相关联。
关于java - Cookie仅在返回页面有效,在其他页面无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14183390/