Session 为什么会话仅在Snap Framework客户端中?

Session 为什么会话仅在Snap Framework客户端中?,session,haskell-snap-framework,Session,Haskell Snap Framework,通过浏览Auth和sessionsnaplets的代码,我发现会话信息只存储在客户机上(作为cookie中的加密密钥/值存储)。会话的一种常见方法是仅与客户端存储会话令牌,然后将其余会话信息(到期日期、密钥/值对)存储在服务器上的数据存储中。Snap方法的基本原理是什么 对我来说,仅客户端会话的缺点是: 密钥/值存储可能会变大并占用大量带宽。如果会话仅用于对用户进行身份验证,则这不是问题 一个依赖于客户端使cookie过期/删除。在服务器上没有至少一部分会话的情况下,设置cookie时实际上是在

通过浏览Auth和sessionsnaplets的代码,我发现会话信息只存储在客户机上(作为cookie中的加密密钥/值存储)。会话的一种常见方法是仅与客户端存储会话令牌,然后将其余会话信息(到期日期、密钥/值对)存储在服务器上的数据存储中。Snap方法的基本原理是什么

对我来说,仅客户端会话的缺点是:

  • 密钥/值存储可能会变大并占用大量带宽。如果会话仅用于对用户进行身份验证,则这不是问题

  • 一个依赖于客户端使cookie过期/删除。在服务器上没有至少一部分会话的情况下,设置cookie时实际上是在分发一个永久有效的令牌


  • 接下来的一个问题是,在Snap中实现服务器端会话的自然方式是什么。理想情况下,我只想编写/修改身份验证和/或会话后端。

    简单性和最小化依赖性。我们一直坚持核心snap框架应该是DB不可知的。如果您仔细观察这个组织,您会发现我们精心设计了会话系统,其核心API完全与后端无关。然后我们包括了一个cookie后端。这为用户提供了可用的功能,而无需强制他们使用特定的持久性系统。它还可以作为一个例子,说明如何基于您选择的任何其他机制编写您自己的后端


    我们还在auth系统中使用了相同的模式。它是一个核心API,允许您使用任何您想要的后端。如果您想为其中任何一个编写自己的后端,请查看现有的实现并将其用作指南。cookie后端是我所知道的唯一一个用于会话的后端,但是auth有几个:包含的基于简单文件的后端,以及包含在和中的后端。

    好的,谢谢,我理解。因此snap core对会话没有特定的方法;它只是提供了一个接口以及一个示例,展示了如何实现它,并让人们开始工作。我想我将能够想出如何实现持久性cookie后端。@dermoritz你最终做了这个吗?我还希望能够在注销时使服务器端的会话cookie无效,我很沮丧地获悉cookieSessionManager似乎不支持这种功能。@rcreswick,抱歉,没有。我实际上切换到了(不可否认,您还必须手动执行这种会话处理)。:)@rcreswick不做你想做的事?@mightybyte看起来不像。此“withTop sess resetSession”不会使会话cookie无效,因此,如果您有cookie,您可以连接到会话(可能仅来自同一主机?我不确定…)如果所有内容都通过SSL,并且您没有MITB等,则这不是问题。。。我仍然希望能够使与不兼容客户端的会话无效。