Django会话,用户和注册之cookie
HTTP状态和TCP不一样,HTTP是无状态的,也就是这一次请求和下一次请求之间没有任何状态保持,我们无法根据请求例如IP来识别是否在同一人的连续性请求。就像我们在访问网站的时候,输入了用户名和密码,但是如果跳转到另一个页面,又必须让我们再输入一次用户名和密码,这肯定是无法接受的。这一章就是要介绍如何保持状态的问题。
首先来看下cookies:
Cookies就是为解决HTTP的无状态的。Cookies是浏览器为web服务器存储的一小段消息。每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies 我们可以通过抓包和在浏览器上看下存放的cookies。例如在浏览器上可以点击下图的红框显示出该网站的cookies值

那么在django中如何查看上报并且设置cookies值呢。首先来看获取,每一个HTTPRequest对象都有一个COOKIES对象。通过request.COOKIES获取。这是一个字典,可以通过request.COOKIES[‘name’]的方式来提取出某个cookie值
写cookies需要用到HttpResponse对象的set_cookie()方法。来看下面的这个例子:设置一个name的cookie值
def function_test(request):
response=HttpResponse('your name is zhf')
response.set_cookie("name",'zhf')
return response
在访问的网页中可以查看到我们设置的cookie值

在set_cookies中可以传递一些参数来控制cookie的行为。Cookie值有如下的值需要设置
max_age: cookie需要延续的时间(以秒为单位) 如果参数是\ `` None`` ,这个cookie会延续到浏览器关闭为止
expires: cookie失效的实际日期/时间。 它的格式必须是: "Wdy, DD-Mth-YY HH:MM:SS GMT"`` 。如果给出了这个参数,它会覆盖max_age参数
path: cookie生效的路径前缀。 浏览器只会把cookie回传给带有该路径的页 面,这样你可以避免将cookie传给站点中的其他的应用
domain: 这个cookie有效的站点。 你可以使用这个参数设置一个跨站点(cross-domain)的cookie。 比如,\ `` domain=".example.com"`` 可以设置一个在\ `` www.example.com`` 、\ `` www2.example.com`` 以及\ `` an.other.sub.domain.example.com`` 站点下都可读到的cookie。如果这个参数被设成\ `` None`` ,cookie将只能在设置它的站点下可以读到
Secure: 如果设置为 ``True`` ,浏览器将通过HTTPS来回传cookie
我们来测试一下,首先设置max_age参数。设置为60秒,也就是一分钟response.set_cookie("name",'zhf',max_age=60)
然后来看下浏览器中存储的值。可以看到到期时间已经发生变化,设置前是浏览会话结束时,现在变成了3:03:22.相比创建时间,正好相差1分钟

我们再加入expires。注意expires参数必须是datetime.datetime的类型
response.set_cookie("name",'zhf',max_age=60,expires=datetime.datetime(2018,02,07,11,0,0))
这是因为在set_cookie中会判断是否是datetime.datetime的实例
if expires is not None:
if isinstance(expires, datetime.datetime):
if timezone.is_aware(expires):
expires = timezone.make_naive(expires, timezone.utc)
可以看到expires值已经覆盖了max_age参数。

接收和设置cookie的功能已经介绍完了,cookie值对于服务器识别用户上确实起到了很便捷的作用。那么缺点是什么呢。缺点就是太容易被伪造。在之前的网络爬虫的章节http://www.cnblogs.com/zhanghongfeng/p/7595846.html
中已经提到通过抓取cookie值实现模拟登陆,所以一旦cookie值被获取到。哪将是非常危险的事情。但是django自带了session框架解决这个问题,下一章我们将介绍session的使用
Django会话,用户和注册之cookie的更多相关文章
- Django实现用户登录注册
本文将会介绍小白如何完成一个用户登录注册系统 新建一个Django项目,名字为login_register,并且使用命令manage.py startapp.User(名字自己随便起) 最终djang ...
- Django商城项目笔记No.6用户部分-注册接口-短信验证码实现celery异步
Django商城项目笔记No.4用户部分-注册接口-短信验证码实现celery异步 接上一篇,如何解决前后端请求跨域问题? 首先想一下,为什么图片验证码请求的也是后端的api.meiduo.site: ...
- COOKIE与SESSION、Django的用户认证、From表单
一.COOKIE 与 SESSION 1.简介 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. ...
- 潭州课堂25班:Ph201805201 django 项目 第九课 图片验证码前台实现,判断用户是否注册功能实现 (课堂笔记)
u胎代码实现 : 针对每一个 app 写个 js 脚本, 先给 users 的 app 应用创建个 js:在指定目录下的 js 文件夹下,创建 users 文件夹,下创建 suth.js ,图片验证 ...
- Django中,ajax检测注册用户信息是否可用?
ajax检测注册用户信息主体思路 1.在settings.py中配置需要使用的信息 #对static文件进行配置 STATICFILES_DIRS=[ os.path.join(BASE_DIR,'s ...
- Django商城项目笔记No.9用户部分-注册接口签发JWTtoken
Django商城项目笔记No.9用户部分-注册接口签发JWTtoken 我们在验证完用户的身份后(检验用户名和密码),需要向用户签发JWT,在需要用到用户身份信息的时候,还需核验用户的JWT. 关于签 ...
- Django商城项目笔记No.8用户部分-注册接口实现
Django商城项目笔记No.8用户部分-注册接口实现 users的view.py中增加如下代码 class RegisterUserView(CreateAPIView): "" ...
- Django商城项目笔记No.7用户部分-注册接口-判断用户名和手机号是否存在
Django商城项目笔记No.7用户部分-注册接口-判断用户名和手机号是否存在 判断用户名是否存在 后端视图代码实现,在users/view.py里编写如下代码 class UsernameCount ...
- Django商城项目笔记No.5用户部分-注册接口-短信验证码
Django商城项目笔记No.4用户部分-注册接口-短信验证码 短信验证码也保存在redis里(sms_code_15101234567) 在views中新增SMSCodeView类视图,并且写出步骤 ...
随机推荐
- Python numpy函数:reshape()
reshape()函数用于改变数组对象的形状: import numpy as np a = np.array([1,2,3,4,5,6,7,8]) #转换成2D数组 b = a.reshape((2 ...
- HDU1695(容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- linux参数之max_map_count
“This file contains the maximum number of memory map areas a process may have. Memory map areas are ...
- 对runtime的总结:让你会用Runtime
导语Runtime,简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制,是一套底层的纯C语言的API,我们平时所编写的OC代码,在程序的运行过程中都转成了runtime的代码,平时调方 ...
- Rails中render和redirect_to的区别
共同点: render 和redirect_to 都是执行页面跳转,但是,写在这两个方法后面的语句仍然会被执行. 不同: render:简单的页面渲染,可以指定渲染的页面或布局文件,但是不会发出请求, ...
- 利用DNS进行传输数据
曾经有这样一道题目,困了我数个小时,最后我尝试利用此方法时我知道真相的时候,眼泪已掉下来. 遇到的是一个流量分析题,分析DNS数据,拿到flag 流量如图所示: 进入linux,提取: [root@s ...
- 新版本Ubuntu本地提权漏洞复现
该漏洞在老版本中被修复了,但新的版本还存在漏洞 影响范围:Linux Kernel Version 4.14-4.4,Ubuntu/Debian发行版本 Exp下载地址:http://cyseclab ...
- Codeforces Round #310 (Div. 2)556ABCDE
https://github.com/Anoxxx/OI/blob/master/Anoxx/Contest10 github自取
- JavaScript Array.map
Array.prototype.map() History Edit This article is in need of a technical review. Table of Contents ...
- 每天一道算法题(15)——打印1到最大的n位数
题目: 打印1到最大的n位数.如n=4,打印1-9999. 思路: 由于直接使用循环会导致int或者long long都不够存储.因此使用字符串来存储数据,这里涉及到数字转换成字符串以及字符串的加法. ...