时间:2011-04-30 09:37:32

标签: java session spring-mvc

我一直在努力避免使用Sessions。我使用了Spring安全性或其他方式让用户登录应用程序,我想这是使用Sessions的主要用例。

但是其他用例是什么?你能列出那些最重要的一个吗?为什么我不使用Sessions就可以开发复杂的应用程序?

是因为我使用spring-mvc并且除了登录内容之外几乎不需要使用Sessions吗?

编辑:伙计们这个问题是要求用例...大多数答案解释了什么是会话。如果我们总结一些用例,我们可以肯定地说,何时使用数据库或会话来维护会话状态... 你不记得你需要会议的具体场景吗?过去几年:)

例如,某些会话状态可能在某些点/事件之后变得持久。在这种情况下,我从一开始就使用数据库。

5 个答案:

答案 0 :(得分:2)

我认为你可以做任何你想做的事而不在会话上存储任何内容。

我通常使用会话来避免在客户端和服务器之间传递状态(使用id作为示例)当我不想向客户端发送敏感信息时(即使在加密形式)因为它可能是一个安全问题。

避免使用会话的其他方法是: *将某些状态存储在数据库中,例如购物车,而不是在会话中,即使购物车在一定时间后被丢弃。 *将状态存储在cookie中,例如用于用户定制

使用会话非常有用的一个用例是对话,尽管通常框架会在幕后管理,并将会话存储在会话中。

修改

Converstions(在我的理解中)就像向导一样,你可以在不同的页面中完成几个表单,最后你可以执行操作。例如结账过程中,用户在不同的页面中输入他的详细信息,送货地址和信用卡详细信息,但您想在最后提交订单,而不在数据库中存储任何中间状态。

我的意思是,根据敏感信息,想象一下,在上一个示例中,一旦用户发送了他的信用卡详细信息,您就不应该以任何格式(甚至加密)将该信息返回给用户。我知道这有点偏执,但那是安全性:)。

答案 1 :(得分:1)

在我正在开发的电子商务系统中,后端有一个外部系统,用于存储用户保存的运费和账单地址。我们的网络应用程序通过进行Web服务调用来检索这些地址。当我们得到地址时,我们将它们存储在会话中。这样,当用户第一次查看他们的地址时,我们只需要调用一次服务,而不是每次我们提供需要地址信息的页面时。我们在地址上有一个生存时间,所以如果地址发生变化(例如,如果用户通过电话给客户服务台更改地址),我们最终会选择新的地址。

可以将地址存储在我们的数据库中,而不是存储在会话中。但为什么我们呢?它是暂时信息,已经存储在其他地方。会议是理想的场所。

答案 2 :(得分:1)

从某种意义上说,你的问题很深(关于会话的特殊情况值得了解),而在另一种意义上说它很浅(如果我不使用它们我不能做什么,结果是一个有点奇怪的问题)

最后,Session只是(或可能是)一个ConcurrentHashMap(事实上它通常不是线程安全的),其中一个唯一会话ID的密钥作为cookie传递。你知道为什么它有用,但要回答你的用例

  • 群集(这是状态如何跨节点分布)
  • 缓存用户及其对象的一般状态(而不是每次从db重新加载)
  • 内置于sessionlisteners的方法,以便在有人超时或属性发生变化时进行监视。 =用于许多本地化实用程序

您可以使用数据库或您自己的hashmap实现/过滤器完成所有这些操作吗?当然,塞申斯没有什么神奇之处。它们仅仅是使某些对象跟随登录用户并且与该用户使用该应用程序的生命周期相关联的便利标准。

为什么使用Servlets?您还可以实现自己的套接字级标准吗?答案就是使用标准的apis / implementation提供了便利,其他库也建立在它们之上。

缺点是

  • 你正在重新发明轮子和一些经过时间测试的代码
  • 您将无法使用大量内置工具进行监控/管理/群集/本地化等。

答案 3 :(得分:0)

会话是跨多个请求维护会话状态的一种方式(例如,多个无状态HTTP请求。)

还有其他实现会话状态的方法,例如,将身份验证令牌或某些合适的会话ID存储为cookie,并将会话ID存储到会话状态。 (实质上,复制应用服务器在提供会话时所执行的操作。)

您不需要使用会话意味着您的应用程序要么不需要会话状态,要么以不同的方式实现它。例如,您的应用程序可能使用身份验证令牌(例如cookie)并将所有状态更改保留到数据库中。通过这种安排,不需要谈话状态。

答案 4 :(得分:0)

嗨,你可以举一个购物车的例子,因为Http是无状态协议,它不会保持发送请求的用户的状态。

例如           如果一个用户从eBay发送购买相机的请求,并在几分钟后另一个用户发送购买笔记本电脑的请求。

但是由于http是无状态协议,因此服务器无法分离用户发送的请求,并且可能发生笔记本电脑的账单可能被提供给第一个用户。

因此,通过会话,我们可以在服务器端维护特定用户的特定实体。