A server-side secure sessions plugin for Sanic
Project description
Gotta get your sessions fast!
=============================
Cookie-based sessions are still a common way to track users's sessions.
Flask and Django have really good support for server-side sessions, but not Sanic yet.
So `sanic-secure-session` is an attempt to create a simple yet enough secure session support for Sanic.
* Server-side sessions (currently only Redis backend implemented)
* Signed session cookie (sure, using `itsdangerous`)
* Easily extensible backends (only serialization and storage-related logic there)
## Usage example
```python
from datetime import timedelta
import asyncio_redis
from sanic import Sanic
from sanic.response import text
from sanic_secure_session import SanicSession
from sanic_secure_session.backends.redis import RedisStorageBackend
class RedisPool:
"""
A simple wrapper class that allows you to share a connection
pool across your application.
"""
_pool = None
async def get_pool(self):
if not self._pool:
self._pool = await asyncio_redis.Pool.create(
host='localhost', port=6379, poolsize=10
)
return self._pool
redis_pool = RedisPool()
storage_backend = RedisStorageBackend(redis_connection=redis_pool.get_pool)
app = Sanic()
SanicSession(app, secret_key='aeNgaif6Ieyishoh', storage_backend=storage_backend,
ttl=timedelta(minutes=1), http_only=True, secure=True)
@app.route("/")
async def index(request):
# interact with the session like a normal dict
if not request['session'].get('foo'):
request['session']['foo'] = 0
request['session']['foo'] += 1
return text({
'cookies': request.cookies,
'session': request['session']
})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)
```
=============================
Cookie-based sessions are still a common way to track users's sessions.
Flask and Django have really good support for server-side sessions, but not Sanic yet.
So `sanic-secure-session` is an attempt to create a simple yet enough secure session support for Sanic.
* Server-side sessions (currently only Redis backend implemented)
* Signed session cookie (sure, using `itsdangerous`)
* Easily extensible backends (only serialization and storage-related logic there)
## Usage example
```python
from datetime import timedelta
import asyncio_redis
from sanic import Sanic
from sanic.response import text
from sanic_secure_session import SanicSession
from sanic_secure_session.backends.redis import RedisStorageBackend
class RedisPool:
"""
A simple wrapper class that allows you to share a connection
pool across your application.
"""
_pool = None
async def get_pool(self):
if not self._pool:
self._pool = await asyncio_redis.Pool.create(
host='localhost', port=6379, poolsize=10
)
return self._pool
redis_pool = RedisPool()
storage_backend = RedisStorageBackend(redis_connection=redis_pool.get_pool)
app = Sanic()
SanicSession(app, secret_key='aeNgaif6Ieyishoh', storage_backend=storage_backend,
ttl=timedelta(minutes=1), http_only=True, secure=True)
@app.route("/")
async def index(request):
# interact with the session like a normal dict
if not request['session'].get('foo'):
request['session']['foo'] = 0
request['session']['foo'] += 1
return text({
'cookies': request.cookies,
'session': request['session']
})
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000, debug=True)
```
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for sanic-secure-session-0.2.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | be8ffe8ded402dd55d71e1cae9fca9ac168e60087294de4b37e85f065d0d2dc6 |
|
MD5 | 32cc3d00b2e494ca6abfafd1769b87bc |
|
BLAKE2b-256 | a6dcc6a79f86988bc1df3e98e7f51c7e3fa26d2d025d98cd30444f49df00adf5 |
Close
Hashes for sanic_secure_session-0.2.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 73e7ae180b25f833f2d32ad98386e73621b89717bb4fd6d1cd52cae4ab2b0bf3 |
|
MD5 | 16ef25a10c1d2b008bdf8462c540cf61 |
|
BLAKE2b-256 | b00f129ea1c208ace2d1bfac1e1560743354ddc344c25602b09a4ef738d37a26 |