我正在使用JSF 2.0,这已经有一段时间了,因为我一直在寻找加密的cookie作为会话的替代方案。我听说“ASP.NET MVC 4”中有这样的内容。JSF 2:使用Cookie而不是会话是一种好的做法吗?
所以问题是:有什么方法可以使用cookie而不是会话来存储数据在 JSF 2.0?如果答案是肯定的,那么这是一种好的做法吗?
我感谢您的意见。
我正在使用JSF 2.0,这已经有一段时间了,因为我一直在寻找加密的cookie作为会话的替代方案。我听说“ASP.NET MVC 4”中有这样的内容。JSF 2:使用Cookie而不是会话是一种好的做法吗?
所以问题是:有什么方法可以使用cookie而不是会话来存储数据在 JSF 2.0?如果答案是肯定的,那么这是一种好的做法吗?
我感谢您的意见。
如果您使用的是setAttribute
和getAttribute
HttpSession中,这就是你想与cookies来取代,(大概是为了节省服务器的内存)的东西,那么你可以很容易地使用HttpServletResponse.addCookie
和HttpServletRequest.getCookies
保存数据的cookie。
现在是否这是一个好主意,取决于你的用例。
+1感谢您的快速响应。有没有内置的方法来保存cookies加密? –
不,你必须加密和解密服务器端的cookies。但是如果你对所有的cookies使用相同的盐,一个坚定的黑客最终可能会绕过你的加密。一种解决方案可能是为每个用户甚至每个会话使用不同的盐。 –
此外,请考虑安全Cookie。它们只通过HTTPS连接传输。 –
使用Cookie的方式是这样的一个:
写入一个cookie:
FacesContext.getCurrentInstance()
.getExternalContext()
.addResponseCookie("CookieName", "value", null);
读取cookie的
Map<String, Object> requestCookieMap = FacesContext.getCurrentInstance()
.getExternalContext()
.getRequestCookieMap();
我认为没有一个 “最佳实践” ,您应该只考虑JSF以广泛的方式使用会话,因此风险在于您的会话规模很大。 Cookie可以帮助您避免太大的会话。
Cookie是网络的重要组成部分,但通常我会尽量避免将它们用于会话管理以外的任何事情。如果您不想将用户会话存储在服务器上,请使用客户端状态保存。你需要使任何会话对象可序列化,但是大概你正在做类似的事情来将状态存储在cookie中。除非你的服务器受到内存限制,否则我会坚持服务器端会话存储,因为它节省了带宽。
感谢您的回复:) –
Cookie的一个主要缺点是用户可能会禁用它们。除了企业环境(您可以控制客户端配置)外,我不会尝试使用它们(除非没有其他选择)您的web应用程序的基本逻辑。 – SJuan76