Play中客户端会话的用例

时间:2017-01-19 05:12:56

标签: session cookies playframework

在游戏中,单词"客户端会话"似乎意味着在会话期间所有数据都存储在客户端的cookie中。和PHP,已知使用"服务器端会话" ,我认为可以将所有数据存储在cookie中。可能不同之处在于cookie是否被秘密密钥烧掉,但我不确定。在称为"服务器端会话"的正常会话中,您可以设置具有会话ID的cookie,然后服务器应该处理会话ID并找到相关的指定值。在此会话中,客户端只有会话ID,这只是一个长号。并且指定的数据存储在服务器端,因此我假设它被称为"服务器端会话"。

我知道在Play中这种方法也是可行的,这意味着客户端具有会话ID,并且服务器通常在缓存中有一些指定的数据。 Play可以将所有数据推送到客户端的cookie中,使用密钥签名,我的问题是我们应该使用"客户端会话"? 我无法想象,在关于Play会议的官方文件中并没有提到这么深刻。

用例是什么?什么时候实现客户端会话? 任何评论或答案都应该受到高度赞赏。

1 个答案:

答案 0 :(得分:3)

服务器端会话的问题是您必须在所有服务器上复制它们。

网站通常部署在多个实例上,前面有一个负载均衡器,可以或多或少随机地将您的请求路由到应用程序实例。要使会话正常工作,所有服务器都需要能够通过将会话存储在数据库等中央数据存储区中或通过复制它们来访问它。这使扩展变得更加困难,因为您必须通过数据库引入瓶颈,或者因为您必须设置复杂的复制方案。

客户端会话的优势在于所有必需的数据都包含在请求本身中,因此您的服务器可以保持无状态,并且不需要彼此通信。不利的一面是,如果您的会话包含大量数据,请求的大小将会增加,并且会在每次请求时重新提交。

会话最常见的用例通常只是存储用户ID或类似信息以指示用户已登录,其大小通常不大于会话令牌。因此,在这种情况下,客户端会话更有效率,例如通过保存您到数据库的往返来检索您的会话。

客户端会话的另一个缺点是安全性,因为服务器端会话在概念上更难以缓和,但是Play通过签名来缓解这种问题。请确保不要在会话中存储任何人们不应该阅读的敏感数据。

从本质上讲,如果您的会话非常小,那么客户端会话可能就是您的选择。如果它们很大或包含敏感数据,您应该使用服务器端会话。