我在同一台计算机上有两个相同程序的副本(一个稳定版本和一个开发版本)。它们位于不同的目录中。它们监听不同的端口(8080和8081)。在这两种情况下,我都使用会话
来存储相对于当前会话的信息。cherrypy。Session ['some_key'] = 'some_value'
I read this information with
cherrypy.session.get (some_key)
程序工作完美,当我只有一个实例。
问题来了,当我试图让两个实例运行。看起来,会话在某种程度上不是独立的:
- 启动两个程序
- 在程序1中执行一些操作(在浏览器中,端口8080),它填充会话变量
- 在程序2中做一些事情,它也填充了会话变量
- 返回程序1 ->会话不再有效:
cherrypy.session.get('some_key')
是None
我尝试将会话存储在ram或文件中,问题是相同的。
您遇到的问题与您的浏览器通过域名或ip分配cookie有关。因为您使用相同的ip访问您的站点,所以有不同的端口并不重要。为了测试这个理论,在每个站点存储不同的会话值,然后访问两个站点并检查您的cookie。如果两个值都存在,那就是你的问题了。
您可以在hosts文件中使用端口为每个站点的ip分配一个域名。那么饼干应该是不同的
192.168.0.154:8080 www.abc.com
192.168.0.154:8181 www.def.com
希望这对你有帮助!
正如Andrew Kloos所解释的,浏览器通过域名或ip来分配cookie。如果我的两个程序在同一台机器上运行,并且在客户端只有一个cookie由两个程序共享。一种解决方案是给cookie起不同的名字。cherry的会话模块给出的默认名称是'session_id'。要设置一个不同的名称,可以在cherrypy配置文件的[/]部分中这样做:
tools.sessions.on = True
tools.sessions.storage_type = file
tools.sessions.storage_path = some_path
tools.sessions.name = some_cookie_name
(感谢Andrew Kloos)