【发布时间】:2020-11-08 15:28:17
【问题描述】:
我一直试图避免使用 Sessions。我已经使用 spring security 或其他方式让用户登录应用程序,我想这是使用 Sessions 的主要用例。
但是其他用例是什么?你能列出那些最重要的吗?为什么我能够在不使用 Sessions 的情况下开发更复杂的应用程序?
是不是因为我使用的是 spring-mvc 并且除了登录的东西之外几乎不需要使用 Sessions 吗?
编辑:伙计们,这个问题是在询问用例......大多数答案都解释了会话的用途。如果我们总结一些用例,我们可以肯定地说,何时使用数据库或会话来维护会话状态...... 你不记得你需要会话的任何具体场景吗?过去几年:)
例如,某些会话状态可能在某个点/事件之后变得持久。在这种情况下,我从一开始就使用数据库。
【问题讨论】:
-
您避免会话的原因是什么?我不明白这里的目标;你避免会议,为什么?你为什么要寻找不避免会话的原因,因为你可以在没有会话的情况下工作?会话只是存储在服务器上的状态;编写完全无状态的应用程序是可能的,但根据应用程序的不同会很困难,因此您要么在这些域中工作,要么将状态存储在其他地方。
-
也许我是偏执狂,但由于我实际上并没有正确使用 Sessions,我不确定我是否可以依赖它以及我应该期待什么缺点。例如,考虑一个 html 表单中的 flash 上传器,它一个接一个地上传一系列文件,您需要将 fileID 存储到会话/数据库中,并通过 ajax 将它们返回到 html 表单并提交。我宁愿选择将其保存到数据库中。我可以 100% 确定不会发生任何意外,因为我确实可以控制它。我可以在未来分析使用数据并设置调度程序以删除死条目。
-
如果你的数据库崩溃了怎么办? :) 我并不是建议您使用会话而不是数据库;我只是发现避免瞬态数据的会话有点奇怪,因为这就是会话概念的用途。您是否希望您的 Web 应用程序在随机点崩溃,无缘无故地突然崩溃?
-
也许我应该以不同的方式提出问题。我可能应该相信会话并使用它们而不是数据库。我现在才问,因为我开始意识到这一点:-)
-
我认为这是一个合理的问题。我认为实际上有一个强有力的论据可以将所有重要的东西都保存在数据库中而不依赖于会话;这意味着您的服务器不必维护状态,这意味着如果一个崩溃,或者您需要添加更多,或者如果您需要将用户从一台超载的机器上移走,一切都会继续工作,而如果您有有状态的服务器,您有担心会话迁移和故障转移,这当然是可能的,但会带来相当大的编程和运行时开销。
标签: java session spring-mvc