|
8 | 8 | from aiohttp import web
|
9 | 9 | from nacl.encoding import Base64Encoder
|
10 | 10 |
|
11 |
| -from aiohttp_session import Session, session_middleware, get_session |
| 11 | +from aiohttp_session import (Session, session_middleware, get_session, |
| 12 | + new_session) |
12 | 13 | from aiohttp_session.nacl_storage import NaClCookieStorage
|
13 | 14 |
|
14 | 15 |
|
@@ -212,3 +213,33 @@ async def handler(request):
|
212 | 213 | make_cookie(client, secretbox, {'a': 1, 'b': 12})
|
213 | 214 | resp = await client.get('/')
|
214 | 215 | assert resp.status == 200
|
| 216 | + |
| 217 | + |
| 218 | +async def test_load_expired_session(aiohttp_client, key): |
| 219 | + MAX_AGE = 2 |
| 220 | + |
| 221 | + async def login(request): |
| 222 | + session = await new_session(request) |
| 223 | + session['created'] = int(time.time()) |
| 224 | + return web.Response() |
| 225 | + |
| 226 | + async def handler(request): |
| 227 | + session = await get_session(request) |
| 228 | + created = session.get('created', None) if not session.new else None |
| 229 | + text = '' |
| 230 | + if created is not None and (time.time() - created) > MAX_AGE: |
| 231 | + text += 'WARNING!' |
| 232 | + return web.Response(text=text) |
| 233 | + |
| 234 | + app = create_app(handler, key, max_age=MAX_AGE) |
| 235 | + app.router.add_route('POST', '/', login) |
| 236 | + |
| 237 | + client = await aiohttp_client(app) |
| 238 | + resp = await client.post('/') |
| 239 | + assert 'AIOHTTP_SESSION' in resp.cookies |
| 240 | + cookie = resp.cookies['AIOHTTP_SESSION'].value |
| 241 | + await asyncio.sleep(MAX_AGE + 1) |
| 242 | + client.session.cookie_jar.update_cookies({'AIOHTTP_SESSION': cookie}) |
| 243 | + resp = await client.get('/') |
| 244 | + body = await resp.text() |
| 245 | + assert body == '' |
0 commit comments