概要
GAE+flaskでsessionストアをcookieからMemcacheに変更したので作業手順をメモ。
cookieでも初めは困りませんが、sessionに格納するデータが増えてくると、 サイズが足りなくなりエラーが発生する可能性があります。
※flaskでは4kbyteまでしかcookieに格納できません。
UserWarning: The "session" cookie is too large
GAEにはマネージドなMemcacheサービスが用意されているのでそちらに移行します。
Flask-sessionをインストール
pip install -t lib Flask-Session
flaskのセッションインターフェースを差し替え
from flask import Flask
from flask_session.sessions import MemcachedSessionInterface
from google.appengine.api import memcache
app = Flask(__name__)
app.session_interface = MemcachedSessionInterface(client=memcache, key_prefix='memsession')
google.appengine.api.memcacheにmemcached互換のライブラリが用意されています。
importしたモジュールをそのままMemcachedSessionInterfaceのclientに指定すれば認証等は特に意識せず、GAEのマネージドMemcacheに接続できます。
dev_appserver.pyを使用したローカル環境での開発でも、上記だけでMemcacheのエミュレーターに接続しに行ってくれます。
(GAE便利ですね…!)
また、memcache.Client()
として自分でクライアントを作成することもできます。
app.session_interface = MemcachedSessionInterface(client=memcache.Client(), key_prefix='memsession')
ただし、完全なmemcached互換では無いため、いくつかの引数は設定しても無視されます。
# こんなことをしたとしてもGAEのmemcachedに接続しに行く
app.session_interface = MemcachedSessionInterface(client=memcache.Client(servers=['10.0.0.0.0.0.0.1:11211']), key_prefix='memsession')
また、スレッドセーフでは無いAPIも存在するので、セッションストアの管理目的の場合、そのままモジュールを渡すのが良いでしょう。