Session 客户端会话的使用案例

Session 客户端会话的使用案例,session,cookies,playframework,Session,Cookies,Playframework,在游戏中,“客户端会话”一词似乎意味着会话期间所有数据都存储在客户端的cookie中。PHP使用“服务器端会话”,我认为可以将所有数据存储在cookie中。可能区别在于饼干是不是用秘密钥匙烧焦的,但我不确定。在称为“服务器端会话”的正常会话中,您可以设置一个具有会话ID的cookie,然后服务器应该处理会话ID并可以找到相关的指定值。在这个会话中,客户端只有会话ID,这只是一个很长的数字。指定的数据存储在服务器端,因此我假设它被称为“服务器端会话” 我知道在游戏中,这种方法也是可能的,这意味着客

在游戏中,“客户端会话”一词似乎意味着会话期间所有数据都存储在客户端的cookie中。PHP使用“服务器端会话”,我认为可以将所有数据存储在cookie中。可能区别在于饼干是不是用秘密钥匙烧焦的,但我不确定。在称为“服务器端会话”的正常会话中,您可以设置一个具有会话ID的cookie,然后服务器应该处理会话ID并可以找到相关的指定值。在这个会话中,客户端只有会话ID,这只是一个很长的数字。指定的数据存储在服务器端,因此我假设它被称为“服务器端会话”

我知道在游戏中,这种方法也是可能的,这意味着客户端具有会话ID,而服务器通常在缓存中具有一些指定的数据。 Play允许将所有数据推送到客户端的cookie中,并使用密钥签名,我的问题是我们应该使用什么类型的实现“客户端会话”? 我不这么认为,而且在一份关于Play会议的官方文件中也没有如此深入地提到

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

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

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

客户端会话的优点是所有必需的数据都包含在请求本身中,因此您的服务器可以保持无状态,不需要彼此通信。这样做的缺点是,如果会话包含大量数据,并且每次请求都会重新提交,那么请求的大小就会增加

不过,会话最常见的用例通常只是存储一个用户ID或类似的标识,以指示用户已登录,其大小通常不大于会话令牌。因此,在这种情况下,客户端会话的效率要高得多,例如,可以为您节省到数据库检索会话的往返时间

客户端会话的另一个缺点是安全性,因为从概念上讲,服务器端会话更难处理,但Play通过对它们进行签名,很好地缓解了这个问题。只需确保不要在会话中存储任何人们不应该读取的敏感数据


因此,从本质上讲,如果会话非常小,客户端会话可能是最好的选择。如果它们很大,或者包含敏感数据,则应使用服务器端会话。

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

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

客户端会话的优点是所有必需的数据都包含在请求本身中,因此您的服务器可以保持无状态,不需要彼此通信。这样做的缺点是,如果会话包含大量数据,并且每次请求都会重新提交,那么请求的大小就会增加

不过,会话最常见的用例通常只是存储一个用户ID或类似的标识,以指示用户已登录,其大小通常不大于会话令牌。因此,在这种情况下,客户端会话的效率要高得多,例如,可以为您节省到数据库检索会话的往返时间

客户端会话的另一个缺点是安全性,因为从概念上讲,服务器端会话更难处理,但Play通过对它们进行签名,很好地缓解了这个问题。只需确保不要在会话中存储任何人们不应该读取的敏感数据

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