customizable session cookie expriration

This commit is contained in:
Massimo
2012-10-16 11:23:41 -05:00
parent f6789eaf39
commit addbb78151
2 changed files with 13 additions and 8 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.1.1 (2012-10-16 11:14:48) dev Version 2.1.1 (2012-10-16 11:23:37) dev
+12 -7
View File
@@ -37,6 +37,7 @@ import sys
import traceback import traceback
import threading import threading
FMT = '%a, %d-%b-%Y %H:%M:%S PST'
PAST = 'Sat, 1-Jan-1971 00:00:00' PAST = 'Sat, 1-Jan-1971 00:00:00'
FUTURE = 'Tue, 1-Dec-2999 23:59:59' FUTURE = 'Tue, 1-Dec-2999 23:59:59'
@@ -468,7 +469,7 @@ class Session(Storage):
separate = None, separate = None,
check_client=False, check_client=False,
cookie_key=None, cookie_key=None,
cookie_expires=FUTURE, cookie_expires=None,
): ):
""" """
separate can be separate=lambda(session_name): session_name[-2:] separate can be separate=lambda(session_name): session_name[-2:]
@@ -484,6 +485,7 @@ class Session(Storage):
masterapp = request.application masterapp = request.application
response.session_id_name = 'session_id_%s' % masterapp.lower() response.session_id_name = 'session_id_%s' % masterapp.lower()
response.session_data_name = 'session_data_%s' % masterapp.lower() response.session_data_name = 'session_data_%s' % masterapp.lower()
response.session_cookie_expires = cookie_expires
# Load session data from cookie # Load session data from cookie
cookies = request.cookies cookies = request.cookies
@@ -505,7 +507,6 @@ class Session(Storage):
if cookie_key: if cookie_key:
response.session_storage_type = 'cookie' response.session_storage_type = 'cookie'
response.session_cookie_key = cookie_key response.session_cookie_key = cookie_key
response.session_data_expires = cookie_expires
if session_cookie_data: if session_cookie_data:
data = secure_loads(session_cookie_data,cookie_key) data = secure_loads(session_cookie_data,cookie_key)
if data: if data:
@@ -614,6 +615,8 @@ class Session(Storage):
rcookies = response.cookies rcookies = response.cookies
rcookies[response.session_id_name] = response.session_id rcookies[response.session_id_name] = response.session_id
rcookies[response.session_id_name]['path'] = '/' rcookies[response.session_id_name]['path'] = '/'
if cookie_expires:
rcookies[response.session_id_name]['expires'] = cookie_expires.strftime(FMT)
# if not cookie_key, but session_data_name in cookies # if not cookie_key, but session_data_name in cookies
# expire session_data_name from cookies # expire session_data_name from cookies
if session_cookie_data: if session_cookie_data:
@@ -648,13 +651,15 @@ class Session(Storage):
def _try_store_in_cookie(self, request, response): def _try_store_in_cookie(self, request, response):
if response.session_storage_type!='cookie': return False if response.session_storage_type!='cookie': return False
name = response.session_data_name
value = secure_dumps(dict(self),response.session_cookie_key) value = secure_dumps(dict(self),response.session_cookie_key)
response.cookies.pop(response.session_data_name,None) expires = response.session_cookie_expires
response.cookies[response.session_data_name] = value rcookies = response.cookies
response.cookies[response.session_data_name]['path'] = '/' rcookies.pop(name,None)
expires = response.session_data_expires rcookies[name] = value
rcookies[name]['path'] = '/'
if expires: if expires:
response.cookies[response.session_data_name]['expires'] = expires rcookies[name]['expires'] = expires.strftime(FMT)
return True return True
def _unchanged(self): def _unchanged(self):