【问题标题】:can get 2 cherrypy instance working simultaneously - sessions are not independent可以让 2 个cherrypy 实例同时工作 - 会话不是独立的
【发布时间】:2014-05-14 11:13:42
【问题描述】:

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

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

我阅读了此信息

cherrypy.session.get('some_key')

当我只有一个实例时,porgram 可以完美运行。

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

  • 启动这两个程序
  • 在程序 1 中做一些事情(在浏览器中,在端口 8080 上),填充会话变量
  • 在程序 2 中做一些事情,它也填充会话变量
  • 返回程序 1 -> 会话不再有效:cherrypy.session.get('some_key')None

我尝试将会话存储在内存或文件中,问题是一样的。

欢迎任何想法......

【问题讨论】:

  • 您如何在浏览器中访问您的网站?
  • 通过 server.com:8080/app1 和 server.com:8081/app2

标签: session cherrypy


【解决方案1】:

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

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

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

希望这会有所帮助!

【讨论】:

  • 好吧,第一个坏消息 :) 但我听说 cookie 也可以存储完整路径(而不仅仅是 DN)。就我而言,这两个应用程序都通过不同的路径访问:server.com:8080/app1 和 server.com:8081/app2。可以用cherrypy解决这个问题吗?
  • 打开浏览器的 cookie 文件,看看是否有两个不同的 cookie。我怀疑你没有。
  • 是的,浏览器只存储和使用一个cookie,名称为session_id,“路径”字段中没有存储任何内容。因此,我想知道 1) 是否可以更改 cookie 的名称,以及 2) 是否可以设置路径。
  • 您可以尝试的另一件事是将另一张网卡放入其中并为您的第二个应用分配不同的 IP。
  • 我做不到。我在网络中,没有管理员权限:)(不在家里!;))
【解决方案2】:

正如 Andrew Kloos 所解释的,浏览器通过域名或 ip 分配 cookie。如果我的两个程序在同一台机器上运行,并且在客户端只有一个 cookie 由两个程序共享。 一种解决方案是为 cookie 赋予不同的名称。樱桃的会话模块给出的默认名称是'session_id'。要设置不同的名称,可以在cherrypy 配置文件的 [/] 部分中执行此操作:

tools.sessions.on = True
tools.sessions.storage_type = file
tools.sessions.storage_path = some_path
tools.sessions.name = some_cookie_name

(感谢安德鲁·克鲁斯)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2017-08-11
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多