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毎回読み取るのではなく、ここに静的な値を入力することになっています。ドキュメントの例を誤解している可能性があります。 からランダムなデータを読み取る方法を示していますが、次os.urandomのことも明確に述べています。

それをコピーしてコードに貼り付けるだけで完了です

実行時にそれを読み取ると、ワーカー プロセスごとに異なる秘密鍵が割り当てられます。つまり、リクエストが別のワーカーによって処理されると、Cookie が間違った秘密鍵で署名されるため、セッションが中断されます。

于 2013-09-10T01:15:44.807 に答える