django的Session-10

Django Session管理
本文详细介绍Django框架中Session的配置与操作方法,包括如何在数据库、缓存、本地文件及Redis中存储Session,以及Session的各种操作如读写、清除和设置有效期。

django需要使用一个中间价来实现 session功能, 一般情况下默认启用了该中间价 ,可以在 settings.pyMIDDLEWARE 设置项目中查看。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

确保下边这句话的存在

'django.contrib.sessions.middleware.SessionMiddleware',

配置储存引擎

session可以存储在数据库,本地缓存中,需要在 settings.py 文件中设置。

存储在sql数据库

默认情况下,django将session存储在数据库中,在 settings.py 文件的 INSTALLED_APPS 配置项中确认有 'django.contrib.sessions' 的存在。

可以设置如下配置项,也可以不写,因为是django的默认配置项。

SESSION_ENGINE='django.contrib.sessions.backends.db'

运行 manage.py migrate 命令进行数据库迁移,在数据库内创建sessions表。

储存在缓存

添加配置项

SESSION_ENGINE='django.contrib.sessions.backends.cache'

但是只把数据储存在缓存中是不安全的。因为一旦缓存满了,系统会自动清除部分数据,服务器重启会清除全部数据。

为了保证数据安全,可以使用以下配置项,在储存在缓存的时候,也会在数据库中储存一份,保证数据安全。

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'

储存在本地文件

添加配置项

SESSION_ENGINE='django.contrib.sessions.backends.file'

同时,必须正确配置SESSION_FILE_PATH(默认使用tempfile.gettempdir()方法的返回值),确保你的文件存储目录,以及Web服务器对该目录具有读写权限。

储存在redis

添加配置项

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

redis://127.0.0.1:6379/1 代表储存在本机redis的一号库。

如果redis不是在本机,需要修改redis的配置文件,添加特定ip地址。

Linux环境下,redis的配置项在 /etc/redis/redis.conf

bind 配置项添加地址即可 bind 127.0.0.1 xxx.xxx.xxx.xxx

添加后重启redis服务 sudo service redis-server restart

session操作

通过 HttpRequest 对象的session属性进行会话的读写操作。

以键值对的格式写session。

request.session['键']=值

根据键读取值。

request.session.get('键',默认值)

清除所有session,在存储中删除值部分。

request.session.clear()

清除session数据,在存储中删除session的整条数据。

request.session.flush()

删除session中的指定键及值,在存储中只删除某个键及对应的值。

del request.session['键']

设置session的有效期

request.session.set_expiry(value)
  • 如果value是一个整数,session将在value秒之后,没有活动后过期。
  • 如果value为0,那么用户session的Cookie将在用户的浏览器关闭时过期。
  • 如果value为None,那么session有效期将采用系统默认值,默认为两周,可以通过在settings.py中设置SESSION_COOKIE_AGE来设置全局默认值。

转载于:https://www.cnblogs.com/mxuanli/p/9850491.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值