REST 和 HttpSession 对象

Cos*_*gin 5 rest servlets jax-rs httpsession

我知道 REST 不应该使用HttpSession. 另一方面,REST 服务在 servlet 容器中运行。从我看到的情况来看,HttpSession只有在以下情况下才会创建对象:

HttpSession session = request.getSession(); 
Run Code Online (Sandbox Code Playgroud)

代码被执行。总是这样吗?除了使用JSP?


我的问题是:HttpSession执行 REST 方法时是否会创建对象?

假设我使用 JAX-RS 框架,如果它有什么不同的话。
如果未创建此类对象,则实际上可能意味着服务器内存的大小可能不会增长,而不管有多少客户端在服务器上使用它。

Don*_*ows 3

HTTP 会话实际上经常与 REST 接口一起使用,但不应包含任何真正关键的内容。因此,它们可用于包含您已通过身份验证的事实或您对某些列表的首选默认排序是什么;在前一种情况下,您还可以同时支持其他身份验证机制,允许完全无状态操作,而在后一种情况下,您还可以轻松支持显式覆盖。只要您不需要会话 \xe2\x80\x94 ,假设您的站点出于争论而使用 HTTP BASIC 身份验证;如果您使用 OAuth,那么您需要启用会话来阻止性能受损 \xe2\x80\x94 那么您仍然可能相当接近 RESTful(在这个领域是肯定的;REST 不是 \xe2\x80\x9cdon'毕竟不要使用sessions\xe2\x80\x9d)。

\n\n

是否担心会话在超时之前持续多长时间?嗯,也许但不是真的。会话实际上是您映射到某个数据库表中的对象,您可以为其配置过期策略,以便它们持续足够长的时间以支持有效使用,而不会造成负担过重。这取决于有多少客户同时使用该网站、他们的使用模式是什么以及您拥有哪些可用的硬件资源(当然)。

\n

  • 感谢您的答复。是的,可以在 REST 中访问会话,如该示例所示: public String mysession(@Context HttpServletRequest req)... 但如果我根本不知道要创建什么会话对象,我如何保证呢?我可以吗? (2认同)