26 lines
630 B
Python
26 lines
630 B
Python
|
# -*- coding: utf-8 -*-
|
||
|
|
||
|
import contextlib
|
||
|
|
||
|
import werkzeug.contrib.sessions
|
||
|
|
||
|
STORES = {}
|
||
|
|
||
|
@contextlib.contextmanager
|
||
|
def session(request, storage_path, session_cookie='sessionid'):
|
||
|
session_store = STORES.get(storage_path)
|
||
|
if not session_store:
|
||
|
session_store = werkzeug.contrib.sessions.FilesystemSessionStore(
|
||
|
storage_path)
|
||
|
STORES[storage_path] = session_store
|
||
|
|
||
|
sid = request.cookies.get(session_cookie)
|
||
|
if sid:
|
||
|
request.session = session_store.get(sid)
|
||
|
else:
|
||
|
request.session = session_store.new()
|
||
|
|
||
|
yield request.session
|
||
|
|
||
|
session_store.save(request.session)
|