[解決済み] Flask-Session エクステンションを使ったセッションで、秘密鍵が設定されていない。
質問
現在、私はflaskのサードパーティライブラリである Flask-セッション を使用していますが、セッションを動作させるのに苦労しています。
自分のサイトに接続すると、以下のエラーが表示されます。
RuntimeError: 秘密鍵が設定されていないため、セッションは使用できません。 が設定されていないため、セッションは利用できません。アプリケーションのsecret_keyにユニークで秘密のものを設定してください。 秘密にしてください。
以下は私のサーバーコードです。
from flask import Flask, session
from flask.ext.session import Session
SESSION_TYPE = 'memcache'
app = Flask(__name__)
sess = Session()
nextId = 0
def verifySessionId():
global nextId
if not 'userId' in session:
session['userId'] = nextId
nextId += 1
sessionId = session['userId']
print ("set userid[" + str(session['userId']) + "]")
else:
print ("using already set userid[" + str(session['userId']) + "]")
sessionId = session.get('userId', None)
return sessionId
@app.route("/")
def hello():
userId = verifySessionId()
print("User id[" + str(userId) + "]")
return str(userId)
if __name__ == "__main__":
app.secret_key = 'super secret key'
sess.init_app(app)
app.debug = True
app.run()
ご覧の通り、アプリの秘密鍵は設定しています。何が間違っているのでしょうか?
他のセッションオプションはありますか?
他の情報です。 Linux MintでPython 2.7を動かしています。
フルペーストです。
Traceback (most recent call last):
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/sean/code/misc/session/sessiontest.py", line 27, in hello
userId = verifySessionId()
File "/home/sean/code/misc/session/sessiontest.py", line 16, in verifySessionId
session['userId'] = nextId
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/werkzeug/local.py", line 341, in __setitem__
self._get_current_object()[key] = value
File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/sessions.py", line 126, in _fail
raise RuntimeError('the session is unavailable because no secret '
RuntimeError: the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.
どのように解決するのですか?
あなたの場合、例外が発生するのは
NullSessionInterface
セッションの実装である
デフォルトのセッションタイプ
を実装したもので、Flask-Session を使用した場合のデフォルトのセッションタイプです。というのも、実際に
SESSION_TYPE
コンフィギュレーション
をFlaskに渡すことはないからです。
です。
足りない
では不十分です。その
Flask-Session クイックスタートのサンプルコード
はグローバルを設定しますが、その後に
app.config.from_object(__name__)
.
このデフォルトは、Flask 0.10 以降ではあまり意味を持ちません。
NullSession
は、Flask 0.8 や 0.9 では意味があったかもしれませんが、現在のバージョンでは
flask.session.NullSession
クラス
はエラーシグナルとして使用されます。あなたの場合、今は間違ったエラーメッセージが表示されています。
を設定します。
SESSION_TYPE
の設定オプションを何か他のものに変更してください。のいずれかを選んでください。
redis
,
memcached
,
filesystem
または
mongodb
で設定し、必ず
app.config
に設定します (直接、または
で設定します。
Config.from_*
メソッド
).
簡単なテストのために、これを
filesystem
に設定するのが最も簡単です。追加の依存関係なしに動作させるのに十分なデフォルトの設定がそこにあります。
if __name__ == "__main__":
# Quick test configuration. Please use proper Flask configuration options
# in production settings, and use a separate file or environment variables
# to manage the secret key!
app.secret_key = 'super secret key'
app.config['SESSION_TYPE'] = 'filesystem'
sess.init_app(app)
app.debug = True
app.run()
このエラーが表示された場合、あなたは
ではなく
を使用している場合、secret の設定に何か問題があります。もしあなたが
app.config['SECRET_KEY']
または
app.secret_key
の中に
if __name__ == "__main__":
のようなガードで、このエラーが発生した場合、おそらくFlaskプロジェクトをインポートしたWSGIサーバーを介してFlaskアプリを実行しているのでしょう。
をモジュールとしてインポートしている
をインポートしているWSGIサーバーで、かつ
__name__ == "__main__"
ブロックは決して実行されません。
常に はFlaskアプリの設定を別ファイルで管理するのがよいでしょう。 を使用したほうがよいでしょう。
関連
-
[解決済み] Flaskのリクエストで受信したデータを取得する
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] Flask でグローバル変数はスレッドセーフか?リクエスト間でデータを共有するには?
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy: セッションの作成と再利用
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] Celeryタスクのユニットテストはどのように行うのですか?
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法