在CentOS 6.3上运行Python 2.7,Apache + mod_wsgi
当我在localhost时,事情很好。但是,当我在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'
关于如何进行更多调试的任何想法?
谢谢!
答案 0 :(得分:24)
请勿使用app.secret_key = os.urandom(24)
!
您应该在此处输入静态值,而不是每次都从os.urandom
读取。您可能误解了docs中的示例,它向您展示了如何从os.urandom
读取随机数据,但它也明确指出:
只需将该内容复制/粘贴到您的代码中即可完成
如果您在运行时阅读它,那么每个工作进程都将拥有不同的密钥!这意味着如果请求由另一个工作人员处理,则会话将中断,因为cookie使用错误的密钥签名。