- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑下面的脚本。它将启动两个子进程,每个子进程都是一个 CherryPy 应用程序(按 Ctrl+C 或系统上的任何 KeyboardInterrupt 组合键来结束它们)。如果您使用 CP 3.0 运行它(注意更改“StartServer”中的 3.0/3.1 特定行),则访问:
...你看到一个空的字典。然后访问:
http://localhost:15002/set?val=10
...您会看到新填充的字典。然后访问:
...然后回到
...什么都没有改变。
如果你在 CP 3.1 上尝试同样的事情(记住“StartServer”中的行!),当你到达最后一步时,dict 现在是空的。这发生在 Windows 和 Debian、Python 2.5 和 2.6 中。
您可以尝试各种各样的事情:更改为文件存储、分离存储路径……唯一的区别是 session 可能会被合并而不是被删除。我读过 another post关于这一点,还有一个建议是将 session 工具配置键放在应用程序配置中而不是全局配置中,但我认为这与应用程序独立运行的这种用法无关。
如何让独立的 CherryPy 应用程序不相互干扰?
注意:我最初是在 CherryPy mailing list 上问这个问题的但还没有得到回应,所以我在这里尝试。我希望没关系。
import os, os.path, socket, sys
import subprocess
import cgi
import cherrypy
HTTP_PORT = 15002
HTTP_HOST = "127.0.0.1"
site1conf = {
'global' : {
'server.socket_host' : HTTP_HOST,
'server.socket_port' : HTTP_PORT,
'tools.sessions.on' : True,
# 'tools.sessions.storage_type': 'file',
# 'tools.sessions.storage_path': '1',
# 'tools.sessions.storage_path': '.',
'tools.sessions.timeout' : 1440}}
site2conf = {
'global' : {
'server.socket_host' : HTTP_HOST,
'server.socket_port' : HTTP_PORT + 10,
'tools.sessions.on' : True,
# 'tools.sessions.storage_type': 'file',
# 'tools.sessions.storage_path': '2',
# 'tools.sessions.storage_path': '.',
'tools.sessions.timeout' : 1440}}
class Home(object) :
def __init__(self, key):
self.key = key
@cherrypy.expose
def index(self):
return """\
<html>
<body>Session:
<br>%s
</body>
</html> """ % cgi.escape(str(dict(cherrypy.session)))
@cherrypy.expose
def set(self, val):
cherrypy.session[self.key.upper()] = val
return """\
<html>
<body>Set %s to %s</body>
</html>""" % (cgi.escape(self.key), cgi.escape(val))
def StartServer(conf, key):
cherrypy.config.update(conf)
print 'Starting server (%s)' % key
cherrypy.tree.mount(Home(key), '/', {})
# Start the web server.
#### 3.0
# cherrypy.server.quickstart()
# cherrypy.engine.start()
####
#### 3.1
cherrypy.engine.start()
cherrypy.engine.block()
####
def Main():
# Start first webserver
proc1 = subprocess.Popen(
[sys.executable, os.path.abspath(__file__), "1"])
proc2 = subprocess.Popen(
[sys.executable, os.path.abspath(__file__), "2"])
proc1.wait()
proc2.wait()
if __name__ == "__main__":
print sys.argv
if len(sys.argv) == 1:
# Master process
Main()
elif(int(sys.argv[1]) == 1):
StartServer(site1conf, 'magic')
elif(int(sys.argv[1]) == 2):
StartServer(site2conf, 'science')
else:
sys.exit(1)
最佳答案
存储 session 标识符的 cookie 绑定(bind)到主机,而不是主机+端口。当您访问第一个站点时,您将获得新的 session ID 在 3.1 中(但在 3.0 中不是),然后您填充 session 数据并可以看到它。之后你用这个session id转到其他端口,但现在它是无效的(我相信你可以在 Debug模式下的日志中看到这一点)。所以服务器向您发送新的 session ID。现在你回到第一台服务器,你的标识符再次无效,所以你得到一个新的。当然,这个新标识符的 session 中没有数据。
更新:RFC 2109,第 4.3.1 节解释 Set-Cookie 说:
The user agent keeps separate track of state information that arrives via Set-Cookie response headers from each origin server (as distinguished by name or IP address and port).
但是标准的解释并不是那么明显。这是相关 ticket 的引用在 Firefox 跟踪器中:
There are two RFC for cookies, 2109 (For set-cookie) and 2965 (For set-cookie2)
In RFC 2109 in section 4.3.1 Interpreting Set-Cookie it states
"Domain Defaults to the request-host. " And in section 2 TERMINOLOGY it states "The terms request-host and request-URI refer to the values the client would send to the server as, respectively, the host (but not port) and abs_path portions of the absoluteURI (http_URL) of the HTTP request line. Note that request-host must be a FQHN." In RFC 2965 in section 3.3.1 Interpreting Set-Cookie2 it states "Domain Defaults to the effective request-host. " it also states " Port The default behavior is that a cookie MAY be returned to any request-port. " And in section 1 TERMINOLOGY it states " The terms request-host and request-URI refer to the values the client would send to the server as, respectively, the host (but not port) and abs_path portions of the absoluteURI (http_URL) of the HTTP request line. " (Just like RFC 2109)My interpretation of these is that port numbers should not be used for recording cookie domains unless a set-cookie2 header explicitly defines port number.
关于python - 相同域、不同端口的 CherryPy session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2597024/
假设我有一些代码(使用 CherryPy),如下所示: import cherrypy class Names: def index(self, name=None): ret
{% if bCat2 == True %} True {% else %} False 返回 False即使 bCat2是 True . 谢谢, 安德鲁 最佳答案 选项 1:最常见的
我这里有一个Python程序。它使用 CherryPy 创建服务器。 # coding:utf-8 import os.path import cherrypy from app import app
我有一个现有的cherrypy应用程序,但我想知道是否可以在gevent wsgi服务器上运行它。我想我可以,但我无法访问 Linux 服务器来测试 gevent,并且无法让它在我的 Mac 上运行。
当我使用cherrypy.tree.mount时,我无法从系统连接到在docker容器中运行的CherryPy服务器,但是当我执行cherrypy.quickstart()时,我可以连接至服务器。对带
我开始学樱桃,但是遇到了路障。我无法获取静态文件来挽救生命。我正在搜索404。The path '/static' was not found.,但是尚未找到解决方案。我要做的就是在http://lo
运行 CherryPy 应用程序时,它会发送服务器名称标签,例如 CherryPy/version。 是否可以在不修改 CherryPy 的情况下从应用程序重命名/覆盖它,以便它显示其他内容? 也许像
CherryPy 服务器将其错误日志写入何处?我已经安装了 CherryPy 并使用 python3.2 启动了服务器 from cherrypy import wsgiserver
我正在开发一个 django 应用程序,我使用cherrypy作为服务器。 Cherrypy 为每个页面 View 创建一个新线程。我希望能够从它们中的任何一个中访问所有这些线程(负责与 django
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: Using mappings in CherryPy 我如何将 url regEx(例如/data/[A-Z].tx
我知道这个问题比“如何加快我的网站的速度”要高出一个步骤,但是我到处都是由Cherrypy驱动的网站,却找不到任何电子商务网站。在开始重写当前站点之前,我们开始使用Cherrypy和jinja2作为概
我有一个cherrypy api,旨在在服务器上运行很长时间。 我有一个不可靠的客户端,它可能会因我无法控制的各种原因而终止或关闭连接。 在我的服务器 api 运行期间,我想定期检查连接状态,确保客户
这是我第一次使用 CherryPy,所以请原谅任何愚蠢的行为。 我正在尝试编写一个 RESTful API,该 API 部分处理添加/删除人员。我希望能够 GET/PUT/DELETE example
我想在不同的端口和不同的应用程序上运行 2 个cherry py 服务器。 我设法运行它们,但是如何在应用程序和服务器之间连接?我希望能够去 http://127.0.0.1:3141/ 并获取ser
有没有办法让 CherryPy 响应包含句点的 url,例如 http://some/base/path/oldscript.py ?我有许多像这样调用的旧 CGI 脚本,我正在尝试将它们整合到一个漂
使用 Cherrypy 如何制作此脚本以便任何 url 都将加载 load index.html 示例,如果使用其中任何一个,那么它们都会加载index.html页面www.mtsite.test/1
我尝试从具有 Transfer-Encoding: chunked header (没有 Content-Length)的 POST 正文中获取数据。内容类型是application/octet-st
我正在构建一个使用 CherryPy 提供 REST API 的应用程序,以及另一个执行后台工作的线程(实际上,它从串行端口读取数据)。 import cherrypy import threadin
我向 CherryPy 服务器添加了摘要身份验证,我想知道撤销用户身份验证的标准是什么,并提示他们再次输入凭据。删除 cookie 不会强制出现提示,但使用隐身或其他浏览器会强制出现提示。 我的配置:
我在启动 CherryPy 时遇到一些问题,我不明白为什么我总是收到此错误。这是版本和带有日志输出的相关代码。Python 2.7.6CherryPy 3.5.0(通过 PIP) CURRENT_DI
我是一名优秀的程序员,十分优秀!