Session 可以让2个cherrypy实例同时工作-会话不是独立的

Session 可以让2个cherrypy实例同时工作-会话不是独立的,session,cherrypy,Session,Cherrypy,我在同一台计算机上有两个相同程序的副本(稳定版本和开发版本)。它们位于不同的目录中。它们监听不同的端口(8080和8081)。在这两种情况下,我都使用会话来存储与当前会话相关的信息 cherrypy.session['some_key']='some_value' 我读到这些信息时带着怀疑 cherrypy.session.get('some_key')) 当我只有一个实例时,porgram工作得很好 当我尝试让这两个实例都运行时,问题就出现了。看起来,会话在某种程度上不是独立的: 启动两个程

我在同一台计算机上有两个相同程序的副本(稳定版本和开发版本)。它们位于不同的目录中。它们监听不同的端口(8080和8081)。在这两种情况下,我都使用会话来存储与当前会话相关的信息

cherrypy.session['some_key']='some_value'

我读到这些信息时带着怀疑

cherrypy.session.get('some_key'))

当我只有一个实例时,porgram工作得很好

当我尝试让这两个实例都运行时,问题就出现了。看起来,会话在某种程度上不是独立的:

  • 启动两个程序
  • 在程序1(在浏览器中,在端口8080上)中执行某些操作,它将填充会话变量
  • 在程序2中执行一些操作,这也会填充会话变量
  • 返回程序1->会话不再有效:
    cherrypy.session.get('some_key')
    is
    None
我试过将会话存储在ram或文件中,问题也是一样的


欢迎任何想法……

您遇到的问题与您的浏览器通过域名或ip分配cookie有关。因为您使用相同的ip访问站点,所以不同的端口并不重要。要测试这一理论,请在每个站点中存储不同的会话值,然后访问这两个站点并检查cookie。如果这两个值都存在,那将是您的问题

您可以使用主机文件中的端口为每个站点的ip分配域名。那么饼干应该是不同的

192.168.0.154:8080  www.abc.com
192.168.0.154:8181  www.def.com

希望这有帮助

正如Andrew Kloos所解释的,浏览器通过域名或ip分配cookie。如果两个my程序在同一台机器上运行,并且在客户端只有一个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)

您如何在浏览器中访问您的站点?通过server.com:8080/app1和server.com:8081/app2Ok,第一个坏消息:)但我听说Cookie还可以存储完整路径(不仅仅是DN)。在我的例子中,这两个应用程序都是通过不同的路径访问的:server.com:8080/app1和server.com:8081/app2。有人能用cherrypy解决这个问题吗?打开浏览器的cookie文件,看看是否有两个不同的cookie。我猜您没有。是的,浏览器只存储和使用了一个cookie,名称为session\u id,“path”字段中没有存储任何内容。因此,我想知道1)是否可以更改cookie的名称,2)是否可以设置路径。你可以尝试的另一件事是在其中插入另一张网卡,并为你的第二个应用程序分配不同的IP。我不能这样做。我在网络中,没有管理员权限:)(不在家!;)