9

我在 CentOS 6.3 上运行 Python 2.7、Apache + mod_wsgi

当我在本地主机上时,一切正常。但是,当我在 Azure 中的 vm 上运行代码时,我看不到会话信息跨页面保留。

基本上在我看来,我有类似的东西:

@frontend.route('/')
def index():
   session['foo'] = 'bar'
   print session['foo']

   return redirect(url_for("frontend.page2"))

@frontend.route('page2')
def page2():
   print session

打印输出为:

bar
<SecureCookieSession {}>

我对 apache 的 wsgi 配置是:

WSGISocketPrefix /var/run/wsgi

<VirtualHost *:80>
    ServerName example.com
    ServerAlias example.com

    WSGIDaemonProcess myproj threads=5 processes=5
    WSGIScriptAlias / /home/mydir/myproj/apache/myproj.wsgi

    <Directory /home/mydir/myproj>
        WSGIScriptReloading On
        WSGIProcessGroup myproj
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

我有 secret_key 集:

app.secret_key = os.urandom(24)

我已经尝试过设置 SERVER_NAME 但它没有帮助:

app.config['SERVER_NAME'] = 'example.com' 

关于如何进行更多调试的任何想法?

谢谢!

4

1 回答 1

26

不要使用app.secret_key = os.urandom(24)

你应该在这里输入一个静态值,而不是os.urandom每次都读取。您可能误解了docs中的示例,它向您展示了如何从中读取随机数据os.urandom,但它也明确指出:

只需将其复制/粘贴到您的代码中即可完成

如果您在运行时读取它,那么您的每个工作进程都会有不同的密钥!这意味着如果请求由不同的工作人员处理,会话将中断,因为 cookie 使用错误的密钥签名。

于 2013-09-10T01:15:44.807 回答