使用Products.BeakerSessionDataManager获取/设置browser_id

时间:2016-09-13 06:42:25

标签: session cookies plone plone-5.x

我在使用Products.BeakerSessionDataManager时将browser_id与会话相关联时遇到问题。我正在研究Plone 5。

据我了解Zope会话,只要在会话数据管理器上调用.getSessionData(),就会创建一个会话数据容器(如果它不存在)。此外,此数据将包含token,与发出请求的浏览器关联的browser_id相同。最后,在名称为_ZopeId的响应上设置cookie(该值与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

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

我想设置一个cookie,我想要一个令牌。我是这样做的,这样我就可以在投票申请中识别匿名客户,这样他们就不会投票多次(至少不会在同一个会议中投票) - 只有在满足某些其他条件时才允许投票的其他机制)。

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

0 个答案:

没有答案