Django通过session实现用户登录

大家就知道Django实现用户登录可以通过session和cookie.

什么是session和cookie呢?我们来分析一下:

百度百科:Session:在计算机网络应用中,称为“会话控制”。Session
对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session
对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web
服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话

我的解释:服务器端为了保存某些数据,或实现某些必要的功能,当用户访问服务器时,将数据临时保存在服务器端以供完成服务器端的其他某些功能。服务器需要保存的数据可以以cookie的方式存储在客户端,也可以以session的方式存储在服务端。例如账号登录记录的功能,可以以session的方式将登录状态保存在服务器端,这样当用户访问其他页面时,需要用到登陆的地方,都可以从该用户的session中取出该用户的数据,为用户服务。而cookie是保存在客户端的明文键值对,但这样直接保存重要信息是不安全的,所以用session比较好。

接下来看看Django是怎么操作session的呢?

设置session的方式:

request.session['username']=username

request.session.setdefault('k1',123)

设置session的过期时间:

request.session.set_expiry(value)

比如:

request.session.set_expiry(24*60*60) 这是一天的,以秒为单位

如果value是个整数,session会在些秒数后失效。

如果value是个datatime或timedelta,session就会在这个时间后失效。

如果value是0,用户关闭浏览器session就会失效。

如果value是None,session会依赖全局session失效策略。

取session信息 :

request.session['username']

或者request.session.get("username",None)

如果在模板里面取session信息:{{request.session.username}}

如果是注销的话,直接删除session:

del request.session['username']

或者删除所有session信息:request.session.delete()

将所有Session失效日期小于当前日期的数据删除 request.session.clear_expired()

Django 中关于 Session 的其他函数
所有 键、值、键值对

request.session.keys()

request.session.values()

request.session.items()

request.session.iterkeys()

request.session.itervalues()

request.session.iteritems()

会话session的key

request.session.session_key

检查会话session的key在数据库中是否存在

request.session.exists("session_key")

所有session信息都保存在数据库中的django_session表中,里面有三个字段,如下:
在这里插入图片描述

可以用session方式来实现用户登录,就相当于Django自带的@login_required,它是判断用户是否登录。

以下是我的部分代码:
设置session信息
在这里插入图片描述

删除session信息
在这里插入图片描述

注意
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用。
1.数据库 Session (默认)

SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)

2.缓存 Session

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

3.文件 Session

SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()

4.缓存+数据库

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎

5.加密Cookie Session

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎

6.其他公用设置项:

SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)

Django 默认使用数据库存储 Session 数据。
如果报错的话,请迁移数据库,如下:

python manage.py makemigrations
python manage.py migrate
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lizige2008

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值