JSF 2:使用cookie而不是会话是一种好习惯吗?

时间:2013-06-19 09:55:11

标签: java jsf session jsf-2 session-cookies

我正在使用JSF 2.0,因为我一直在搜索加密的cookie作为会话的替代方案已经有一段时间了。我听说过“ASP.NET MVC 4”中有类似的内容。

所以问题是:有没有办法使用cookie代替会话来存储数据 JSF 2.0?如果答案是肯定的,那么这是一个好习惯吗?

感谢您的评论。

3 个答案:

答案 0 :(得分:3)

如果您正在使用setAttributegetAttribute HttpSession,那就是您要用Cookie替换的内容(可能是为了节省服务器内存),那么您可以轻松地将这些数据保存到Cookie中HttpServletResponse.addCookieHttpServletRequest.getCookies

现在这是否是一个好主意,取决于你的用例。

  1. 如果您经常更新会话中的值,请记住,您将在浏览器的每个响应中发送更新的cookie。这将增加响应的大小。
  2. Cookie存储在客户端,因此用户也可以操纵它们。根据您的使用情况,这可能会在您的应用程序中引入安全漏洞
  3. Cookie的有效期可能大于会话。根据您在Cookie中存储的内容,这可能很有用。
  4. 使用Cookie允许Javascript访问值,如果您使用它,这可能会很好。但它也让您了解跨站点脚本。
  5. 用户和组织可以禁用Cookie。因此,根据用户的身份,如果您依赖现有数据,这可能会破坏您的应用程序。

答案 1 :(得分:0)

使用cookies的方法就是这样:

写入cookie:

FacesContext.getCurrentInstance()
 .getExternalContext()
 .addResponseCookie("CookieName", "value", null);

阅读cookie

Map<String, Object> requestCookieMap = FacesContext.getCurrentInstance()
   .getExternalContext()
   .getRequestCookieMap();

我认为没有“最佳实践”,您应该只考虑JSF以广泛的方式使用会话,因此风险是您有一个很好的会话大小。 Cookie可以帮助您避免过多的会话。

答案 2 :(得分:0)

Cookie是网络的重要组成部分,但通常我会尽量避免将其用于会话管理以外的任何内容。如果您不想在服务器上存储用户会话,请使用客户端状态保存。您需要使任何会话对象可序列化,但可能您正在做类似的事情,以便将状态存储在cookie中。除非您的服务器受到内存限制,否则我只需坚持服务器端会话存储,因为它可以节省带宽。