关于django用户登录认证中的cookie和session

Posted on 2017-08-26 11:50  LOMOoO  阅读(323)  评论(0编辑  收藏  举报

最近弄django的时候在用户登录这一块遇到了困难,网上的资料也都不完整或者存在缺陷。

写这篇文章的主要目的是对一些刚学django的新手朋友提供一些帮助。前提是你对django中的session和cookie已经有了一定的了解。

我最基本的设想是当用户登陆了网站后,用户访问本网站的其他网页时依旧能识别其身份。

很多教程的方法是在用户的cookie中存储用户名,这种方法当然是非常不安全的。

其实只要我们使用了django中的session,django就会自动在用户的cookie中存储 sessionid ,用以识别用户。

比如,我们设计了一个用户登录的视图

其中我们使用了 request.session['username'] = username 来使用session保存用户名。

这样一来django便会自动设置在cookie中存储sessionid

我们来试验一下。

1.首先打开login页面,可以看到这时候cookie中只有我们的csrf的token

2.这时我们尝试登陆

3.登陆成功后,系统会为我们分配一个sessionid

4.这时假设我们在设计一个主页的视图,尝试根据session获取用户名,如果获取不到则说明,用户未登录

5.我们进入该页面,由于之前我们cookie中的sesionid还在,所以这里会显示我们的用户名

7.假如我们要登出,我们只需要使用session的 flush函数,django便会删除session以及用户cookie中的sessionid,视图如下

 

8.在我们登出之后,我们在刷新之前的主页,我们会发现,我们变成了游客,cookie中的sessionid也被删除,这说明我们的思路是没有错误的,当然这只是最基本的用户登录思路,真正实用时,我们需要进一步完善我们的认证系统。