1. 什么是Cookie,它的用途是什么?


Cookies是一些存储在用户电脑上的小文件。它是被设计用来保存一些站点的用户数据,这样能够让服务器为这样的用户定制内容,后者页面代码能够获取到Cookie值然后发送给服务器。比如Cookie中存储了所在地理位置,以后每次进入地图就默认定位到改地点即可。

2. 通过什么方式能获取到Cookie的内容,我能查看自己电脑上的Cookie吗?


能通过Web Server或者客户端浏览器来获取到Cookie。多数浏览器能够配置允许用户访问Cookies,但是注意不同的站点之间的Cookie是不能共享的。打开Chrome的调试窗口可以在Resource的Cookie侧边栏查看,或者在console中输入document.cookie来查看,这属于在电脑上行查看,另外一种服务器中查看可见后面的例子。

3. Cookie是什么时候生成的,完整的生成、传递和使用过程是怎么样的?


写数据到Cookie中通常是在一个页面被加载的时候,比如提交按钮被按下,后台处理完请求跳转到相应页面后会把Cookie值带回来,如下是一个例子:

·你在浏览器地址栏输入了一个站点,然后浏览器会发送请求到站点的Web服务器请求该页面
    ·与此同时,浏览器会在个人电脑上行查找和该站点对应的Cookie文件,如果发现了就会把里面的键值对内容全部发送给Web服务器,如果没找到则不发送。
    ·页面服务器接收到了Cookie的数据后,可以利用这些数据决定返回到前台的内容(更进一步是跟Session结合使用)
    ·如果没键值对被Web服务器接收到,站点就知道该用户没有访问过,就会为这个访问地址新建一个ID并且发送一些键值对给前台,这些值会被放在这次响应中的Header带给浏览器,浏览器端于是有了Cookie的值
    ·任何到服务的访问和数据请求都可能很对Cookie中的键值对进行修改

4.一个简单使用Cookie的例子


这个例子是利用Cookie实现一个用户登陆

views.py

user_info={      #创建一个后台数据组
'dachengzi':{'pwd':''},
'gangbazi':{'pwd':''},
} def login(request):
if request.method=="GET": #通过GET请求返回到login界面
return render(request,'login.html')
if request.method=='POST': #请求方式为POST
u=request.POST.get('user')
p=request.POST.get('pwd')
dic=user_info.get(u) #从前端得到username与user_info的数据组进行比较
if not dic: #不相同
return render(request,'login.html') #返回login.html
if dic['pwd']==p: #如果密码与前端输入的相同
res=redirect('/index') #跳转到index.html
res.set_cookie('username',u) #设置cooki里的用户名
return res
else:
return render(request,'login.html') def index(request):
v=request.COOKIES.get('username') #从cookie里得到用户名
if not v: #用户名不存在
return request('/login') #返回login.html
return render(request,'index.html',{'current_user':v})

login.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login/" method="post" >
<input type="text" name="user" placeholder="用户名" />
<input type="password" name="pwd" placeholder="密码" />
<input type="submit" value="提交" />
</form>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎登录:{{ current_user }}</h1>
</body>
</html>

5. 使用Cookie存在的一些问题


·多个用户公用一台电脑比如网吧,那么前一个人登陆购物网站并购买物品,后一个人可以使用前一人的账号进行购物。

·清除浏览器缓存的账号和密码等操作可以擦出掉Cookie,因而很难恢复之前做过的操作,要查看添加到购物车商品几乎不可能。

·多太电脑之间的网站浏览记录(这里不是浏览器的历史记录)会不一致,比如这台电脑某宝告诉你你浏览过某些商品,另一台电脑可能是另外一些商品,因为不同Cookie对应的不同浏览记录。

这也是为什么需要使用账号登陆的原因,只要登陆过就能把所有记录跟后台数据库中的账号强关联起来。

6.设置Cookie


response = HttpResponse(...) 或 response = render(request, ...)或response =redirect("/...")

response .set_cookie(key,value,参数...)
response .set_signed_cookie(key,value,salt='加密钥',参数...)
参数:
key, 键
value='', 值
max_age=None, 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

<script src='/static/js/jquery.cookie.js'></script>
$.cookie("list_pager_num", 30,{ path: '/' })

Django框架下的小人物--Cookie的更多相关文章

  1. MySQL在Django框架下的基本操作(MySQL在Linux下配置)

    [原]本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下: ------------------------------------------------------ ...

  2. Django框架下的增强分页组件

    本文通过文章同步功能推送至博客园,显示排版可能会有所错误,请见谅! 描述:Django框架内置了分页功能,但其只能满足简单需求,难以实现复杂功能. 实现代码: #!/usr/bin/env pytho ...

  3. Django框架(十一)--cookie和session

    cookie和session组件 cookie 1.cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它 ...

  4. mvc框架下,怎样用cookie实现下次自动登录

    登录时有个下次自动登录的checkBox.点了它下次就可以自动登录了 具体流程我都晓得,就是细节的地方有些搞不定.我只要解决3个问题: (1)登录时如果点了checkbox,则在本机产生一个cooki ...

  5. Django框架下报的版本问题

    报错环境 python=3.6.5,django=2.2,PyMySQL=0.9.3 …… django.core.exceptions.ImproperlyConfigured: mysqlclie ...

  6. django框架下celery+rabbitmq+flower完成异步任务

    [转载请注明出处:] http://www.cnblogs.com/yukityan/p/8035787.html 环境: ubuntu16.04 64位 安装: sudo apt-get insta ...

  7. 1、Python django 框架下的word Excel TXT Image 等文件的上传

    1.文件上传(input标签) (1)html代码(form表单用post方法提交) <input class="btn btn-primary col-md-1" styl ...

  8. Django框架下数据存储实现时间戳格式存储到数据库2019-12-11 17:53:13

    2019-12-11 17:53:13 models.py class DomainDir(models.Model): date = models.DateTimeField() views.py ...

  9. django 框架下的路由分发

随机推荐

  1. Python高级特性:Python迭代、生成器、列表生成式

    迭代 给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration). 在java和C语言中,迭代是通过循环list的下标来完成的,Pyth ...

  2. Installing Percona XtraDB Cluster on CentOS

    PXC简介 Percona XtraDB Cluster(简称PXC集群)提供了MySQL高可用的一种实现方法. 1.集群是有节点组成的,推荐配置至少3个节点,但是也可以运行在2个节点上. 2.每个节 ...

  3. maven执行"mvn clean package" 命令报错

    昨天利用mvn打包,执行程序'mvn clean package' 命令,发现打包失败 问题描述 具体看代码 发信tomcat下的log 清除不掉.为什么呢?忽然想起来我的项目服务还起着,于是我把服务 ...

  4. Angular js Radio Button

    症状: 绑定一个list   radio button 老是只能绑定一行,纠结了很久 ,回家发现  原来是 name 用了同一个  ,坑啊,记录下 免得下次再犯. 之前的代码 <ul> & ...

  5. 解决还原数据库是出现system.data.sqlclient.sqlerror filestream功能被禁用的问题

    在master数据库下新建查询 输入如下语句: USE master GO RECONFIGURE 执行 成功还原数据库

  6. mysql 开发基础系列3

    日期类型 如果要用来表示年月日,通常用DATE 来表示. 如果要用来表示年月日时分秒,通常用DATETIME 表示. 如果只用来表示时分秒,通常用TIME 来表示. TIMESTAMP表示格式 :YY ...

  7. jmete JSR223 PostProcessor使用

    1.使用xpath Extractor提取页面值 2.使用 JSR223 PostProcessor拼接json数据 function genJsons() { var MaterialName = ...

  8. NewSQL 介绍

    1.CAP: CAP原理:• Consistency(一致性): 数据一致更新,所有数据变动都是同步的• Availability(可用性): 好的响应性能• Partition tolerance( ...

  9. 小Z的袜子(hose) HYSBZ - 2038 (莫队算法)

    原文地址:http://hzwer.com/2782.html 「BZOJ2038」[2009国家集训队] 小Z的袜子(hose) 2014年4月26日13,34721 Description 作为一 ...

  10. 旧题新做:从idy的视角看数据结构

    “今天你不写总结……!!!” 额…… 还是讲我的吧.这些考试都是idy出的题. 20170121:DFS序. ST表.线段树练习 这是第一次考数据结构. Problem 1. setsum 1 sec ...