Session 无状态web应用程序的好处是什么?

Session 无状态web应用程序的好处是什么?,session,session-state,session-variables,stateless,Session,Session State,Session Variables,Stateless,似乎有些web架构师的目标是拥有一个无状态的web应用程序。这是否意味着基本上不存储用户会话?还是还有更多 如果只是用户会话存储,不这样做有什么好处 减少内存使用。想象一下,如果谷歌存储了每个用户的会话信息 更容易支持服务器场。如果您需要会话数据,并且有多台服务器,则需要一种跨服务器同步该会话数据的方法。通常这是使用数据库完成的 减少会话过期问题。有时,过期会话会导致难以发现和测试的问题。无会话应用程序不会受到这些问题的影响 Url链接能力。有些站点存储用户在会话中查看的内容的ID。这使得用户不

似乎有些web架构师的目标是拥有一个无状态的web应用程序。这是否意味着基本上不存储用户会话?还是还有更多

如果只是用户会话存储,不这样做有什么好处

  • 减少内存使用。想象一下,如果谷歌存储了每个用户的会话信息
  • 更容易支持服务器场。如果您需要会话数据,并且有多台服务器,则需要一种跨服务器同步该会话数据的方法。通常这是使用数据库完成的
  • 减少会话过期问题。有时,过期会话会导致难以发现和测试的问题。无会话应用程序不会受到这些问题的影响
  • Url链接能力。有些站点存储用户在会话中查看的内容的ID。这使得用户不可能简单地复制粘贴URL或将其发送给朋友

  • 注意:会话数据实际上是缓存数据。这就是它的用途。如果您有一个需要重用的昂贵查询,请将其保存到会话中。只要记住,当你以后尝试得到它时,你不能假设它会在那里。在检索之前,请始终检查它是否存在。

    从开发人员的角度来看,无状态可以帮助使应用程序更易于维护和使用。如果我知道我正在处理的网站是无状态的,我就不必担心在加载特定页面之前在会话中是否正确初始化了

    从用户的角度来看,无状态允许资源可以链接。如果页面是无状态的,那么当我将朋友链接到该页面时,我知道他们会看到我看到的内容


    从可扩展性和性能的角度来看,请参见tsters答案。

    “用户会话存储”在拥有多个web服务器后,可能是一个难以扩展的问题。+1表示可链接的内容。这实际上是我不使用会话数据的主要原因之一。我将把它添加到我的答案中。并非所有无状态应用程序都是可链接的。您可以拥有SPA前端(没有正确的路由),并且在服务器端完全无状态,但是会话状态保持在javascript中。IE,在这种情况下,您无法共享URL并确保您的朋友看到相同的内容,但web应用程序仍将被视为无状态。还有一个问题:如果应用程序确实是无状态的,那么是否无法监视用户是否登录并进行身份验证?@Genadinik,否,您可以记录用户最后一次访问该站点的权限,这是基于会话的站点所能做的。这不像会话运行站点与用户的浏览器保持某种连接。@t所以,即使我将会话/用户状态存储在memcache中,应用程序也不会被认为是无状态的?这个国家一定要被关在床上@Jaskey,我从来没有说过状态应该在客户机中。如果将其用作用户请求的缓存,这与存储“用户状态”不同。“用户状态”我认为是“如果我丢失此数据,我的应用程序将失去功能”的数据,而“缓存数据”是“如果我丢失此数据,我的应用程序将失去性能”