3
>>> from django.conf import settings
4
>>> from django.contrib.sessions.backends.db import SessionStore as DatabaseSession
5
>>> from django.contrib.sessions.backends.cache import SessionStore as CacheSession
6
>>> from django.contrib.sessions.backends.file import SessionStore as FileSession
7
>>> from django.contrib.sessions.backends.base import SessionBase
8
>>> from django.contrib.sessions.models import Session
10
>>> db_session = DatabaseSession()
11
>>> db_session.modified
13
>>> db_session.get('cat')
14
>>> db_session['cat'] = "dog"
15
>>> db_session.modified
17
>>> db_session.pop('cat')
19
>>> db_session.pop('some key', 'does not exist')
22
>>> db_session.exists(db_session.session_key)
24
>>> db_session.delete(db_session.session_key)
25
>>> db_session.exists(db_session.session_key)
28
>>> db_session['foo'] = 'bar'
30
>>> db_session.exists(db_session.session_key)
32
>>> prev_key = db_session.session_key
33
>>> db_session.flush()
34
>>> db_session.exists(prev_key)
36
>>> db_session.session_key == prev_key
38
>>> db_session.modified, db_session.accessed
40
>>> db_session['a'], db_session['b'] = 'c', 'd'
42
>>> prev_key = db_session.session_key
43
>>> prev_data = db_session.items()
44
>>> db_session.cycle_key()
45
>>> db_session.session_key == prev_key
47
>>> db_session.items() == prev_data
50
# Submitting an invalid session key (either by guessing, or if the db has
51
# removed the key) results in a new key being generated.
52
>>> Session.objects.filter(pk=db_session.session_key).delete()
53
>>> db_session = DatabaseSession(db_session.session_key)
55
>>> DatabaseSession('1').get('cat')
57
>>> file_session = FileSession()
58
>>> file_session.modified
60
>>> file_session['cat'] = "dog"
61
>>> file_session.modified
63
>>> file_session.pop('cat')
65
>>> file_session.pop('some key', 'does not exist')
67
>>> file_session.save()
68
>>> file_session.exists(file_session.session_key)
70
>>> file_session.delete(file_session.session_key)
71
>>> file_session.exists(file_session.session_key)
73
>>> FileSession('1').get('cat')
75
>>> file_session['foo'] = 'bar'
76
>>> file_session.save()
77
>>> file_session.exists(file_session.session_key)
79
>>> prev_key = file_session.session_key
80
>>> file_session.flush()
81
>>> file_session.exists(prev_key)
83
>>> file_session.session_key == prev_key
85
>>> file_session.modified, file_session.accessed
87
>>> file_session['a'], file_session['b'] = 'c', 'd'
88
>>> file_session.save()
89
>>> prev_key = file_session.session_key
90
>>> prev_data = file_session.items()
91
>>> file_session.cycle_key()
92
>>> file_session.session_key == prev_key
94
>>> file_session.items() == prev_data
97
>>> Session.objects.filter(pk=file_session.session_key).delete()
98
>>> file_session = FileSession(file_session.session_key)
99
>>> file_session.save()
101
# Make sure the file backend checks for a good storage dir
102
>>> settings.SESSION_FILE_PATH = "/if/this/directory/exists/you/have/a/weird/computer"
104
Traceback (innermost last):
106
ImproperlyConfigured: The session storage path '/if/this/directory/exists/you/have/a/weird/computer' doesn't exist. Please set your SESSION_FILE_PATH setting to an existing directory in which Django can store session data.
108
>>> cache_session = CacheSession()
109
>>> cache_session.modified
111
>>> cache_session['cat'] = "dog"
112
>>> cache_session.modified
114
>>> cache_session.pop('cat')
116
>>> cache_session.pop('some key', 'does not exist')
118
>>> cache_session.save()
119
>>> cache_session.delete(cache_session.session_key)
120
>>> cache_session.exists(cache_session.session_key)
122
>>> cache_session['foo'] = 'bar'
123
>>> cache_session.save()
124
>>> cache_session.exists(cache_session.session_key)
126
>>> prev_key = cache_session.session_key
127
>>> cache_session.flush()
128
>>> cache_session.exists(prev_key)
130
>>> cache_session.session_key == prev_key
132
>>> cache_session.modified, cache_session.accessed
134
>>> cache_session['a'], cache_session['b'] = 'c', 'd'
135
>>> cache_session.save()
136
>>> prev_key = cache_session.session_key
137
>>> prev_data = cache_session.items()
138
>>> cache_session.cycle_key()
139
>>> cache_session.session_key == prev_key
141
>>> cache_session.items() == prev_data
144
>>> Session.objects.filter(pk=cache_session.session_key).delete()
145
>>> cache_session = CacheSession(cache_session.session_key)
146
>>> cache_session.save()
147
>>> CacheSession('1').get('cat')
149
>>> s = SessionBase()
150
>>> s._session['some key'] = 'exists' # Pre-populate the session with some data
151
>>> s.accessed = False # Reset to pretend this wasn't accessed previously
153
>>> s.accessed, s.modified
156
>>> s.pop('non existant key', 'does not exist')
158
>>> s.accessed, s.modified
161
>>> s.setdefault('foo', 'bar')
163
>>> s.setdefault('foo', 'baz')
166
>>> s.accessed = False # Reset the accessed flag
168
>>> s.pop('some key')
170
>>> s.accessed, s.modified
173
>>> s.pop('some key', 'does not exist')
177
>>> s.get('update key', None)
180
>>> s.modified = s.accessed = False # Reset to pretend this wasn't accessed previously
181
>>> s.update({'update key':1})
182
>>> s.accessed, s.modified
184
>>> s.get('update key', None)
188
>>> s.modified = s.accessed = False # Reset to pretend this wasn't accessed previously
189
>>> s.has_key('update key')
191
>>> s.accessed, s.modified
195
>>> s = SessionBase()
205
>>> s.accessed = False
207
>>> hasattr(i,'__iter__')
215
>>> s.accessed = False
216
>>> i = s.itervalues()
217
>>> hasattr(i,'__iter__')
225
>>> s.accessed = False
226
>>> i = s.iteritems()
227
>>> hasattr(i,'__iter__')
235
>>> s.modified = s.accessed = False
241
>>> s.accessed, s.modified
244
#########################
245
# Custom session expiry #
246
#########################
248
>>> from django.conf import settings
249
>>> from datetime import datetime, timedelta
251
>>> td10 = timedelta(seconds=10)
253
# A normal session has a max age equal to settings
254
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
257
# So does a custom session with an idle expiration time of 0 (but it'll expire
260
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
263
# Custom session idle expiration time
265
>>> delta = s.get_expiry_date() - datetime.now()
266
>>> delta.seconds in (9, 10)
268
>>> age = s.get_expiry_age()
272
# Custom session fixed expiry date (timedelta)
273
>>> s.set_expiry(td10)
274
>>> delta = s.get_expiry_date() - datetime.now()
275
>>> delta.seconds in (9, 10)
277
>>> age = s.get_expiry_age()
281
# Custom session fixed expiry date (fixed datetime)
282
>>> s.set_expiry(datetime.now() + td10)
283
>>> delta = s.get_expiry_date() - datetime.now()
284
>>> delta.seconds in (9, 10)
286
>>> age = s.get_expiry_age()
290
# Set back to default session age
291
>>> s.set_expiry(None)
292
>>> s.get_expiry_age() == settings.SESSION_COOKIE_AGE
295
# Allow to set back to default session age even if no alternate has been set
296
>>> s.set_expiry(None)
299
# We're changing the setting then reverting back to the original setting at the
300
# end of these tests.
301
>>> original_expire_at_browser_close = settings.SESSION_EXPIRE_AT_BROWSER_CLOSE
302
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = False
306
>>> s.get_expire_at_browser_close()
309
# Custom expire-at-browser-close
311
>>> s.get_expire_at_browser_close()
314
# Default session age
315
>>> s.set_expiry(None)
316
>>> s.get_expire_at_browser_close()
319
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = True
323
>>> s.get_expire_at_browser_close()
326
# Custom expire-at-browser-close
328
>>> s.get_expire_at_browser_close()
331
# Default session age
332
>>> s.set_expiry(None)
333
>>> s.get_expire_at_browser_close()
336
>>> settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = original_expire_at_browser_close
339
if __name__ == '__main__':