可以获得2个cherry实例同时工作-会话不是独立的



我在同一台计算机上有两个相同程序的副本(一个稳定版本和一个开发版本)。它们位于不同的目录中。它们监听不同的端口(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)

最新更新