Django中Session的设置,获取,session有效期,储存方式的设置,以及过期session 的处理

Django中Session的使用

Session一般用于用户登录状态的检测,例如验证账号密码成功后,在Cookie中添加Session

Session是基于Cookie保存的,所以Cookie一旦禁用,则Session无法正常使用

Session则是服务端保存的一种加密过的数据信息,通过设置和获取Session可以进行登录状态验证

1. 设置及获取Session

Django中的Session对象,类似于Dict字典对象,所以他可以使用字典的.get/.keys/.values等方法,并且支持[key]取值

session_obj = request.session # session是请求对象的属性
session_obj.get('user') # 获取session中的user字段(和dict.get(一样))
session_obj.['user'] # 获取session中的user字段(没取到会报错)
session_obj.set('name') # 设置session中的name字段

2. 删除Session或其中指定字段

因为Session对象和字典类型很像,所以删除也很相似

# 删除session的指定键
del request.session['键'] # del关键字直接删除

# 直接清除session的值,在储存中,删除session的值部分
request.session.clear()

# 清除session的数据,在储存中,删除session的整条数据
# 这个更干净,相当于回到没有生成过的时候
request.session.flush()

# 移除会话中键 key 对应的值,并返回该值。如果键不存在,则返回 default。
request.session.pop(key, default=None)

#  循环使用会话键。该方法会创建一个新的会话键,并将旧的会话数据复制到新的会话中,然后删除旧的会话。(用于安全)
request.session.cycle_key()

3. Session有效期

3.1 设置有效期

Django中Session默认有效时间是两周,可以通过set_expiry函数自定义设置

# 语法格式
request.session.set_expiry(value)
  1. value>0,则在对应秒后过期
  2. value=0,浏览器关闭后过期
  3. value=None,则会采用默认设置值,默认为2周,但是可以在settings.py中SESSION_COOKIE_AGE中设置过期时间

3.2 查看有效期

# 语法格式
request.session.get_expiry_age() # 获取Session还有多少秒过期
request.session.get_expiry_date() # 获取过期的时间,返回一个日期对象,Django中的timezone对象,和datetime对象通用
request.session.get_expire_at_browser_close()  #获取session是不是在浏览器关闭就失效,是则返回True,反之False

4. Session在Django中的存储

4.1 基于数据库的Session存储:

默认情况下,Django使用数据库来存储Session数据。它将Session数据存储在名为django_session的数据库表中。你需要在你的Django项目的设置文件(settings.py)中设置SESSION_ENGINEdjango.contrib.sessions.backends.db,这样Django就会使用数据库来存储Session数据。

4.2 基于缓存的Session存储:

另一种常见的Session存储方式是使用缓存,这可以提高性能并减少对数据库的访问。Django支持多种缓存后端,如Memcached和Redis。你需要在设置文件中设置SESSION_ENGINEdjango.contrib.sessions.backends.cache,并配置相应的缓存设置,如CACHE_BACKENDCACHE_LOCATION

4.3文件系统Session存储:

Django还支持将Session数据存储在文件系统中。你可以将SESSION_ENGINE设置为django.contrib.sessions.backends.file,这样Session数据将被保存在指定的文件夹中。

这里展示基于数据库的Session储存
在这里插入图片描述

5. Session会不会自动删除?

Django保存在数据库中的Session即使是过期了,也不会进行删除,所以需要我们自己去进行定期的删除

Django为项目提供了快速删除过期Session的manage命令

python manage.py clearsessions # 运行删除脚本即可
# 可以设置为服务器定时任务

下面通过一个案例,实现Session添加,删除

需求:简单实现登录,登录成功则在Session中添加用户ID

路由urls.py

path("login/", Book.views.login, ),  # 登录
path("userinfo/", Book.views.user_info, ), # 查看用户信息 
path("logout/",Book.views.logout,) # 注销登录

视图views.py

def login(request):
    user = request.GET.get('user')
    password = request.GET.get('password')
    if password != '123456':
        return HttpResponse('密码错误!!!')
    else:
        request.session['user'] = user # 直接设置request.session即可
        return HttpResponse('登录成功!!!')


def user_info(request):
    user = request.session.get('user') # 通过get或者[key]读取session中的字段
    if user:
        return HttpResponse(f'当前登录用户:{user}')
    else:
        return HttpResponse(f'您没有登录账户!!!!')

y]读取session中的字段
if user:
return HttpResponse(f’当前登录用户:{user}‘)
else:
return HttpResponse(f’您没有登录账户!!!’)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值