【问题标题】:Flask session not persisting烧瓶会话不持久
【发布时间】:2013-09-13 14:09:54
【问题描述】:

在 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' 

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

谢谢!

【问题讨论】:

  • 您有密钥吗?会话需要它:app.secret_key = 'something long and random'
  • 是的,我有密钥。谢谢。
  • 您将会话存储在哪里?
  • @cababunga:我使用的是 Flask 的默认存储。问题已解决,正是 mata 指出的问题。

标签: python session flask


【解决方案1】:

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

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

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

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

【讨论】:

  • Doh,就是这样。非常感谢。希望这更容易调试。
猜你喜欢
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多