我正在使用 JSF 2.0,自从我一直在搜索加密的 cookie 作为会话的替代方案以来已经有一段时间了。我听说“ASP.NET MVC 4”中有这样的东西。
所以问题是:在 JSF 2.0 中是否有任何方法可以使用 cookie 而不是 session 来存储数据?如果答案是肯定的,这是一个好习惯吗?
我很欣赏你的评论。
我正在使用 JSF 2.0,自从我一直在搜索加密的 cookie 作为会话的替代方案以来已经有一段时间了。我听说“ASP.NET MVC 4”中有这样的东西。
所以问题是:在 JSF 2.0 中是否有任何方法可以使用 cookie 而不是 session 来存储数据?如果答案是肯定的,这是一个好习惯吗?
我很欣赏你的评论。
如果您正在使用setAttribute
and getAttribute
HttpSession 并且这就是您想用 cookie 替换的内容(大概是为了节省服务器内存),那么您可以使用HttpServletResponse.addCookie
and轻松将该数据保存到 cookie 中HttpServletRequest.getCookies
。
现在这是否是一个好主意,取决于您的用例。
使用cookies的方法是这样的:
写入 cookie:
FacesContext.getCurrentInstance()
.getExternalContext()
.addResponseCookie("CookieName", "value", null);
读取 cookie
Map<String, Object> requestCookieMap = FacesContext.getCurrentInstance()
.getExternalContext()
.getRequestCookieMap();
我认为没有“最佳实践”,您应该只考虑 JSF 以广泛的方式使用会话,因此风险在于您的会话规模很大。Cookies 可以帮助您避免过大的会话。
Cookie 是网络的重要组成部分,但通常我会尽量避免将它们用于会话管理之外的任何事情。如果您不想将用户会话存储在服务器上,请使用客户端状态保存。您需要使任何会话对象可序列化,但大概您正在做类似的事情以将状态存储在 cookie 中。除非您的服务器内存非常有限,否则我会坚持使用服务器端会话存储,因为它可以节省带宽。