我在使用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,我想要一个令牌。我是这样做的,这样我就可以在投票申请中识别匿名客户,这样他们就不会投票多次(至少不会在同一个会议中投票) - 只有在满足某些其他条件时才允许投票的其他机制)。
我误解了机器,还是我错过了什么?