gpt4 book ai didi

java - JSF 中 "Remember me"的 Cookie

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:47:25 24 4
gpt4 key购买 nike

我有一个登录页面,我想添加“记住我”功能;这样,如果用户注销并再次打开页面,则会加载他的用户名和密码。为此,当用户登录时(并选中“记住我”),我保存以下 cookie:

FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie userCookie = new Cookie("vtusername", username);
userCookie.setMaxAge(3600);
((HttpServletResponse) facesContext.getExternalContext()
.getResponse()).addCookie(userCookie);
Cookie passCokie = new Cookie("vtpassword", password);
passCokie.setMaxAge(3600);
((HttpServletResponse) facesContext.getExternalContext()
.getResponse()).addCookie(passCokie);

问题是后来(在同一个 session 中)我读取了 cookie,我看到 maxAge = -1;即使我将其设置为 3600...这是为什么呢?另一个问题:如果我使用 userCookie.setSecure(true) 设置 cookie 安全,那么我无法读取它(它消失了)。

另一个问题:由于密码存储在 cookie 中,我应该如何加密它?最佳做法是什么?

提前致谢

最佳答案

The problem is that later (in the same session) I read the cookies and I see that maxAge = -1; even though I'm setting it to 3600... why is that?

因为浏览器不会发回 maxage。它只发回 cookie name=value。 maxage 仅存储在浏览器中。您可以在网络浏览器本身的 cookie 查看器/编辑器中进行检查。例如,在 Firefox 中,您可以通过工具 > 选项 > 隐私 > 删除单个 cookie 检查所有 cookie。输入域(例如 localhost)以查看 cookie。

Another issue: if I set the cookie secure with userCookie.setSecure(true) then I can't read it (it dissapears).

它仅在通过 HTTPS 而不是 HTTP 提供请求/响应时有效。此外,当请求已经通过 HTTPS 提供时,它已经默认为 secure=true。

Another question: since a password is being stored in a cookie, should I encrypt it some how? what is the best practice?

不要将原始名称/密码存储在两个 cookie 中。除此之外,这可以很容易地放入一个 cookie 中,这是一个非常糟糕的主意,而且很容易被黑客攻击。使用具有自动生成的长、唯一且无法猜测的值的单个 cookie。将此值与用户 ID 一起存储在服务器端的数据库中。当有人使用此 cookie 访问您的站点,但用户尚未登录(即 session 中没有 User 对象)时,您可以进行自动登录。

另见:

关于java - JSF 中 "Remember me"的 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5836413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com