Package: aiohttp-session
aiohttp_sessionThe library provides sessions foraiohttp.web.UsageThe library allows us to store user-specific data into a session object.The session object has a dict-like interface (operations likesession[key] = value,value = session[key]etc. are present).Before processing the session in a web-handler, you have to register thesession middlewareinaiohttp.web.Application.A trivial usage example:importtimefromcryptographyimportfernetfromaiohttpimportwebfromaiohttp_sessionimportsetup,get_sessionfromaiohttp_session.cookie_storageimportEncryptedCookieStorageasyncdefhandler(request):session=awaitget_session(request)last_visit=session['last_visit']if'last_visit'insessionelseNonesession['last_visit']=time.time()text='Last visited:{}'.format(last_visit)returnweb.Response(text=text)defmake_app():app=web.Application()fernet_key=fernet.Fernet.generate_key()f=fernet.Fernet(fernet_key)setup(app,EncryptedCookieStorage(f))app.router.add_get('/',handler)returnappweb.run_app(make_app())All storages use an HTTP Cookie namedAIOHTTP_SESSIONfor storing
data. This can be modified by passing the keyword argumentcookie_nameto
the storage class of your choice.Available session storages are:aiohttp_session.SimpleCookieStorage()– keeps session data as a
plain JSON string in the cookie body. Use the storage only for testing
purposes, it’s very non-secure.aiohttp_session.cookie_storage.EncryptedCookieStorage(secret_key)– stores the session data into a cookie asSimpleCookieStoragebut
encodes it via AES cipher.secrect_keyis abyteskey for AES
encryption/decryption, the length should be 32 bytes.Requirescryptographylibrary:$ pip install aiohttp_session[secure]aiohttp_session.redis_storage.RedisStorage(redis_pool)– stores
JSON encoded data inredis, keeping only the redis key (a random UUID) in
the cookie.redis_poolis aredisobject, created byawaitaioredis.from_url(...)call.$ pip install aiohttp_session[aioredis]DevelopingInstall for local development:$ make setupRun linters:$ make lintRun tests:$ make testThird party extensionsaiohttp_session_mongoaiohttp_session_dynamodbLicenseaiohttp_sessionis offered under the Apache 2 license.2.12.0 (2022-10-28)Migrated fromaioredistoredis(if using redis without installingaiohttp-session[aioredis]then it will be necessary to manually installredis).2.11.0 (2021-01-31)Support initialisingEncryptedCookieStoragewithFernetobject directly.Fix an issue where the session would get reset before the cookie expiry.2.10.0 (2021-12-30)Typing supportAdd samesite cookie optionSupport aioredis 22.9.0 (2019-11-04)Fix memcached expiring time (#398)2.8.0 (2019-09-17)Make this compatible with Python 3.7+. Import from collections.abc, instead
of from collections. (#373)2.7.0 (2018-10-13)Reset a session if the session age > max_age (#331)Reset a session on TTL expiration for EncryptedCookieStorage (#326)2.6.0 (2018-09-12)Create a new session ifNaClCookieStoragecannot decode a
corrupted cookie (#317)2.5.0 (2018-05-12)Add an API for requesting new session explicitly (#281)2.4.0 (2018-05-04)Fix a bug for session fixation (#272)2.3.0 (2018-02-13)Support custom encoder and decoder by all storages (#252)Bump to aiohttp 3.02.2.0 (2018-01-31)Fixed the formatting of an error handling bad middleware return types. (#249)2.1.0 (2017-11-24)Addsession.set_new_identity()method for changing identity for a
new session (#236)2.0.1 (2017-11-22)Replace assertions in aioredis installation checks byRuntimeError(#235)2.0.0 (2017-11-21)Update to aioredis 1.0+. The aiohttp-session 2.0 is not compatible
with aioredis 0.X (#234)1.2.1 (2017-11-20)Pin aioredis<1.0 (#231)1.2.0 (2017-11-06)Add MemcachedStorage (#224)1.1.0 (2017-11-03)Upgrade middleware to new style from aiohttp 2.3+1.0.1 (2017-09-13)Add key_factory attribute for redis_storage (#205)1.0.0 (2017-07-27)Catch decoder exception in RedisStorage on data load (#175)Specify domain and path on cookie deletion (#171)0.8.0 (2016-12-04)Usetime.time()instead oftime.monotonic()for absolute times (#81)0.7.0 (2016-09-24)Fix tests to be compatible with aiohttp upstream API for client cookies0.6.0 (2016-09-08)Add expires field automatically to support older browsers (#43)Respect session.max_age in redis storage #45Always pass default max_age from storage into session (#45)0.5.0 (2016-02-21)Handle cryptography.fernet.InvalidToken exception by providing an
empty session (#29)0.4.0 (2016-01-06)Add optional NaCl encrypted storage (#20)Relax EncryptedCookieStorage to accept base64 encoded string,
e.g. generated by Fernet.generate_key.Add setup() functionSave the session even on exception in the middleware chain0.3.0 (2015-11-20)Reflect aiohttp changes: minimum required Python version is 3.4.1Use explicit ‘aiohttp_session’ package0.2.0 (2015-09-07)Add session.created property (#14)Replaced PyCrypto with crypthography library (#16)0.1.2 (2015-08-07)Add manifest file (#15)0.1.1 (2015-04-20)Fix #7: stop cookie name growing each time session is saved0.1.0 (2015-04-13)First public release