2

使用 Products.BeakerSessionDataManager 时,我在将 browser_id 关联到会话时遇到问题。我正在开发 Plone 5。

据我了解 Zope 会话,一旦.getSessionData()在会话数据管理器上调用,如果会话数据容器不存在,则会创建它。此外,此数据将包含一个,与发出请求的浏览器关联token的相同。browser_id最后,在响应上设置一个 cookie,名称为_ZopeId(并且值与 相同token)。因此,当我使用 Zope 附带的默认会话数据管理器时,我得到以下信息:

ipdb> context.session_data_manager.getSessionData() id: 14737473151418102847, token: 38878600A7nh90DE9ao, content keys: []

但是,当我使用 Products.BeakerSessionDataManager 时,同样的调用给了我这个:

ipdb> context.session_data_manager.getSessionData() {'_accessed_time': 1473745441.437582, '_creation_time': 1473745441.437582}

此外,没有设置 cookie

仔细阅读一些旧的 Zope 文档,我找到了对 的引用getContainerKey(),所以我认为这可能会让我得到 browser_id。但是,每个请求的返回值都不同,因此不起作用。此外,调用.getBrowserIdManager().getBrowserId()session_data_manager引发错误,因为 Beaker 不支持浏览器 ID 管理器。

我想设置一个cookie,我想要一个令牌。我这样做是为了在投票应用程序中识别匿名客户,这样他们就不会投多票(至少不是在同一个会话中——只有在满足某些其他条件时才允许投票)。

我误解了机器,还是我错过了什么?

4

0 回答 0