users can switch between sessions storage types
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.1.1 (2012-10-16 07:44:17) dev
|
Version 2.1.1 (2012-10-16 10:25:18) dev
|
||||||
|
|||||||
+12
-7
@@ -36,8 +36,9 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import traceback
|
import traceback
|
||||||
import threading
|
import threading
|
||||||
import hmac
|
|
||||||
import base64
|
PAST = 'Sat, 1-Jan-1971 00:00:00'
|
||||||
|
FUTURE = 'Tue, 1-Dec-2999 23:59:59'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from gluon.contrib.minify import minify
|
from gluon.contrib.minify import minify
|
||||||
@@ -523,7 +524,7 @@ class Session(Storage):
|
|||||||
else:
|
else:
|
||||||
response.session_id = None
|
response.session_id = None
|
||||||
# do not try load the data from file is these was data in cookie
|
# do not try load the data from file is these was data in cookie
|
||||||
if response.session_id: #TODO and not session_cookie_data:
|
if response.session_id and not session_cookie_data:
|
||||||
try:
|
try:
|
||||||
response.session_file = \
|
response.session_file = \
|
||||||
open(response.session_filename, 'rb+')
|
open(response.session_filename, 'rb+')
|
||||||
@@ -591,7 +592,7 @@ class Session(Storage):
|
|||||||
if record_id == '0':
|
if record_id == '0':
|
||||||
raise Exception, 'record_id == 0'
|
raise Exception, 'record_id == 0'
|
||||||
# Select from database
|
# Select from database
|
||||||
if True: # TODO: not session_cookie_data:
|
if not session_cookie_data:
|
||||||
rows = db(table.id == record_id).select()
|
rows = db(table.id == record_id).select()
|
||||||
# Make sure the session data exists in the database
|
# Make sure the session data exists in the database
|
||||||
if len(rows) == 0 or rows[0].unique_key != unique_key:
|
if len(rows) == 0 or rows[0].unique_key != unique_key:
|
||||||
@@ -611,9 +612,12 @@ 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'] = '/'
|
||||||
# TODO: if not session data in cookie, delete seession_data_name cookie
|
# if not cookie_key, but session_data_name in cookies
|
||||||
#if session_cookie_data:
|
# expire session_data_name from cookies
|
||||||
# rcookies[response.session_data_name]
|
if session_cookie_data:
|
||||||
|
rcookies[response.session_data_name] = 'expired'
|
||||||
|
rcookies[response.session_data_name]['path'] = '/'
|
||||||
|
rcookies[response.session_data_name]['expires'] = PAST
|
||||||
if self.flash:
|
if self.flash:
|
||||||
(response.flash, self.flash) = (self.flash, None)
|
(response.flash, self.flash) = (self.flash, None)
|
||||||
|
|
||||||
@@ -645,6 +649,7 @@ class Session(Storage):
|
|||||||
value = secure_dumps(dict(self),response.session_cookie_key)
|
value = secure_dumps(dict(self),response.session_cookie_key)
|
||||||
response.cookies[response.session_data_name] = value
|
response.cookies[response.session_data_name] = value
|
||||||
response.cookies[response.session_data_name]['path'] = '/'
|
response.cookies[response.session_data_name]['path'] = '/'
|
||||||
|
response.cookies[response.session_data_name]['expires'] = FUTURE
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _unchanged(self):
|
def _unchanged(self):
|
||||||
|
|||||||
@@ -116,6 +116,8 @@ def secure_dumps(data,encryption_key,hash_key=None):
|
|||||||
return signature+':'+encrypted_data
|
return signature+':'+encrypted_data
|
||||||
|
|
||||||
def secure_loads(data,encryption_key,hash_key=None):
|
def secure_loads(data,encryption_key,hash_key=None):
|
||||||
|
if not ':' in data:
|
||||||
|
return None
|
||||||
if not hash_key:
|
if not hash_key:
|
||||||
hash_key = hashlib.sha1(encryption_key).hexdigest()
|
hash_key = hashlib.sha1(encryption_key).hexdigest()
|
||||||
signature, encrypted_data = data.split(':',1)
|
signature, encrypted_data = data.split(':',1)
|
||||||
|
|||||||
Reference in New Issue
Block a user