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实现一个用户登陆

urls.py

from django.contrib import admin
from django.urls import path
from cookie import views urlpatterns = [
path('admin/', admin.site.urls),
path('login/',views.login),
path('index/', views.index),
]

views.py

from django.shortcuts import render,redirect,HttpResponse
# Create your views here. user_info={
#创建一个后台数据组
'dachengzi':{'pwd':'123123'},
'gangbazi':{'pwd':'123'},
} 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) if not dict:
return render(request, 'login.html') if dic['pwd'] == p: #如果密码与前端输入的相同
res = redirect('/index')
res.set_cookie('username',u) #设置cookie里的用户名
return res
else:
return render(request, 'login.html') def index(request):
v = request.COOKIES.get('username') #从cookie里得到用户名
if not v: #用户名不存在
return redirect('/login')
return render(request,'index.html',{'current_user': v})

index.html

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

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>

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获取(不是绝对,底层抓包可以获取到也可以被覆盖)

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

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

参考自:https://www.cnblogs.com/zhuifeng-mayi/p/9056981.html

session 和 cookie的使用方式类似, 使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的key

Django2 --- cookie的更多相关文章

  1. Django2.2 会话技术cookie session token的区别以及实例介绍

    一.区别: 本人见解:使用自定义数据项进行加密,作为唯一身份识别,登陆时写入cookie(session基于这个).在显示相关数据 1.cookie 属于客户端会话技术(数据存储在客户端) 默认的Co ...

  2. Django2.2 Vue 前后端分离 无法访问Cookie

    个人验证后可用配置如下: 环境: - Django 2.2 - djangorestframework 3.9 - django-cors-headers 2.5.3 INSTALLED_APPS = ...

  3. 54.1 怎样才算学会django? 知道这28个知识点才算会django2

    学到什么程度才算会django了?这篇文章帮你梳理一下 关于django2的28个不可不知的知识点总结: 1.cookie操作: -客户端本地存储的键值对 2.session操作: -服务器端可以保存 ...

  4. python3+django2 开发易语言网络验证(上)

    创作背景: 在某论坛中下载到一套php开发易语言网络验证的教程,照着看下来,花了两天的时间,结果发现教程里开发的网络验证,以及随着教程一起给学员的源码,都存在着根本用不了的bug!我想要看看能不能在原 ...

  5. request response cookie session

    request 1. url传递参数 1)参数没有命名, 如: users/views def weather(request, city, year): print(city) print(year ...

  6. Django2.1 更新说明!

    Django2.1版本发布时间:2018-8-1 一.Python兼容性 Django2.1只支持Python 3.5. 3.6和3.7以上版本.Django2.0是最后一个支持Python3.4及一 ...

  7. 超大 Cookie 拒绝服务攻击

    有没有想过,如果网站的 Cookie 特别多特别大,会发生什么情况? 不多说,马上来试验一下: for (i = 0; i < 20; i++) document.cookie = i + '= ...

  8. IE10、IE11 User-Agent 导致的 ASP.Net 网站无法写入Cookie 问题

    你是否遇到过当使用一个涉及到Cookie操作的网站或者管理系统时,IE 6.7.8.9下都跑的好好的,唯独到了IE10.11这些高版本浏览器就不行了?好吧,这个问题码农连续2天内遇到了2次.那么,我们 ...

  9. 解决cookie跨域访问

    一.前言 随着项目模块越来越多,很多模块现在都是独立部署.模块之间的交流有时可能会通过cookie来完成.比如说门户和应用,分别部署在不同的机器或者web容器中,假如用户登陆之后会在浏览器客户端写入c ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_06 Properties集合_2_Properties集合中的方法store

    第一行是注释,第二行是时间,时间是自动加的 使用FileOutputStream. 写入中文会乱码

  2. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_7_字符输出流的续写和换行

    追加写就是后面参数设置为true 加入换行符

  3. UIAutomation元素识别软件

    通过Python调用UIAutomation库来开发代码时,都会遇到需要识别元素的问题.笔者在这里推荐两款好用的软件:UISpy和Inspect. UISpy识别元素后,我们需要的属性有:ClassN ...

  4. run_jetty_run插件安装

    eclipse安装run_jetty_run不能使用在线模式,因为Google等网站已经被屏蔽,不能访问.要先下载jar包,本地安装.

  5. WebServiceBinding属性

    属性 类型 读 写 说明 ConformsTo Wsiprofiles x x 绑定需要遵守的WS-I标准 EmitConformanceClaims Boolean     如果为true,当WSD ...

  6. String.indexOf()的使用方法

    String.indexOf()的用途: 返回此字符串中第一个出现的指定的子字符串,如果没有找到则返回-1 源码如下: /** * Returns the index within this stri ...

  7. 牛客练习赛51 C 勾股定理https://ac.nowcoder.com/acm/contest/1083/C

    题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形. 输入描述: 一个整数n. 输出描述: 另外两条边b,c.答案不唯一,只要输出任意一组即为合理, ...

  8. 让网站动起来!12款优秀的 jQuery 动画

    Textillate.js 介绍:Textillate.js 是一个简单的 CSS3 文本动画插件.结合了一些非常棒的库,把 CSS3 动画轻松应用到任何文本.只需要在项目中简单地引入 textill ...

  9. 小白学Python(13)——pyecharts 绘制 柱状图/条形图 Bar

    Bar-基本示例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...

  10. asp.net Swiper 轮播动画

    原文:https://blog.csdn.net/qq_39656138/article/details/90451289 官网:https://www.swiper.com.cn/api/index ...