通过浏览Auth和Session快照的代码,我观察到会话信息仅存储在客户端上(作为cookie中的加密密钥/值存储)。会话的常用方法是仅与客户端存储会话令牌,然后将剩余的会话信息(到期日期,键/值对)放在服务器上的数据存储中。 Snap的方法的基本原理是什么?
对我来说,仅客户端会话的缺点是:
键/值存储可能会变大并占用大量带宽。如果会话仅用于对用户进行身份验证,则不会出现此问题。
一个人依赖客户端来过期/删除cookie。如果没有在服务器上进行至少部分会话,则在设置cookie时,有效地分发一个有效的令牌。
后续问题是在Snap中实现服务器端会话的自然方式。理想情况下,我只想编写/修改身份验证和/或会话后端。
答案 0 :(得分:3)
简单性和最小化依赖性。我们一直强烈认为核心快照框架应该与数据库无关。如果仔细观察组织,您会发现我们使用完全与后端无关的核心API精心设计了会话系统。然后我们加入了一个cookie后端。这为用户提供了可操作的功能,而无需在其上强制使用特定的持久性系统。它还可以作为如何根据您选择的任何其他机制编写自己的后端的示例。
我们也使用了与auth系统相同的模式。它是一个核心API,可让您使用您想要的任何后端。如果您想为其中任何一个编写自己的后端,请查看现有实现并将其用作指南。 Cookie后端是我所知道的唯一一个会话,但auth有几个:包含的基于文件的简单文件,以及snaplet-postgresql-simple,snaplet-mysql-simple和{{3}中包含的内容}。