django处理cookie的机制
title: django处理cookie的机制
tags: djaogo, cookie, session
grammar_cjkRuby: true
cookie的意义
在多数日常使用的网站中,都需要用到cookie的机制。
凡是需要登录后按用户身份进行功能使用的网站,大多数使用了cookie机制。
那么,cookie是什么呢?
cookie是用来标示用户身份的,可以标示特定的用户
每个用户都有自己特定的cookie
我们可以通过cookie拿到用户标示,识别用户,进而达到给每个用户提供不一样的页面的可能性。
通过一个例子看下cookie的使用场景。
在之前的博客中,我们讲述了一个简单的登陆的例子。
其中就有使用cookies的功能
def index(request):
msg = ""
username = request.get_cookie("username"):
if username:
return render(request, 'index.html', {'username': username})
else:
return render(request, 'login.html')
可以看到 ,后端通过request.get_cookie方法得到了之前的程序段放到cookie中的username
这样,就通过cookie把用户名读出来了
有关cookie的一些API参数设置
HttpResponse.set_cookie(key, value='', max_age=None, expires=None,
path='/', domain=None, secure=None, httponly=False)
设置一个cookie。参数与Python 标准库中的Morsel Cookie 对象相同。
max_age 以秒为单位,如果Cookie只应该持续客户端浏览器的会话时长则应该为None(默认值)
如果没有指定expires,则会通过计算得到。
expires 应该是一个 UTC "Wdy, DD-Mon-YY HH:MM:SS GMT"
格式的字符串,或者一个datetime.datetime 对象。如果expires 是一个datetime 对象,则max_age 会通过计算得到。
如果你想设置一个跨域的Cookie,请使用domain 参数。例如,domain=".lawrence.com"
将设置一个www.lawrence.com blogs.lawrence.com 和calendars.lawrence.com
都可读的Cookie。否则,Cookie 将只能被设置它的域读取。
如果你想阻止客服端的JavaScript 访问Cookie,可以设置httponly=True。
HTTPOnly 是包含在HTTP 响应头部Set-Cookie 中的一个标记。它不是RFC 2109 中Cookie
的标准,也并没有被所有的浏览器支持。但是,如果使用,它是一种降低客户端脚本访问受保护的Cookie 数据风险的有用的方法警告
RFC 2109 和RFC 6265 都声明客户端至少应该支持4096个字节的Cookie。对于许多浏览器,这也是最大的大小。如果视图存储大于4096 个字节的Cookie,Django
不会引发异常,但是浏览器将不能正确设置Cookie。
我们做点简单的实验,看看这些参数的意义是怎样的
首先,我们给cookies设置过期时间
max_age 的单位是秒
我们把上面的程序段改写如下:
#coding:utf-8
from django.shortcuts import render
from django.shortcuts import redirect
from app01 import models
def login(request):
# models.Administrator.objects.create(username = "root", password =
# "123123")
msg = ''
if request.method == 'POST':
print 'start...'
print request.method
username = request.POST.get('username')
password = request.POST.get('password')
c = models.Administrator.objects.filter(username = username,
password = password).count()
if c:
rep = redirect('/index.html')
rep.set_cookie('username', username, max_age = 20)
rep.set_cookie('email', "aaabbb")
return rep
else:
msg = "用户名密码有错误"
return render(request, "login.html", {'msg': msg})
return render(request, 'login.html', {'msg': msg})
我们通过设置max_age可以看到,设置20秒的过期时间,当登陆之后,页面在20秒后会退回到登陆页
domain参数用于设置作用域,防止跨域问题,设置了作用域之后,则该cookie只能在该域名下生效,其他域名是读取不到这个cookie的
httponly选项则是限定是否只能通过正常的http访问的方式得到cookie的值
如果不设置这个值或者设置为False的话
那么是可以在浏览器的调试模式通过documen.cookie方法得到cookie的值的
当我们设置httponly为False的时候,就会发现在前端是无法通过document.cookie获取到cookie的值的
即使使用了httponly = True的方式或者是set_sign_cookie的方式,还是不够安全,因为可以通过抓包等方式获取cookie的内容
还有种cookie叫做signed_cookie
其实就是对cookie进行了编码,实现了一定程度上的cookie加密功能
request.set_signed_cookie(k, v, salt = "XXXXX")
参数简要说明:
k,v 是键值对
salt是加密盐
那么,怎么达到既保证安全又能让用户有个性化的服务呢?
答案是把敏感信息放到数据库中保存
非敏感信息可以放到cookie里面去
cookie和session有什么区别
cookie是客户端的
session是服务端的
但是session的目的也是为了标记客户端,所以session也需要借助cookie来实现
django处理cookie的机制的更多相关文章
- Redis+Django(Session,Cookie)的用户系统
一.Django authentication django authentication提供了一个便利的user api接口,无论在py中 request.user,参见Request and re ...
- 第十九章 Django的ORM映射机制
第十九章 Django的ORM映射机制 第一课 Django获取多个数据以及文件上传 1.获取多选的结果(checkbox,select/option)时: req.POST.getlist('fav ...
- Redis+Django(Session,Cookie、Cache)的用户系统
转自 http://www.cnblogs.com/BeginMan/p/3890761.html 一.Django authentication django authentication 提供了一 ...
- [py][mx]django的cookie和session操作-7天免登录
浏览器同源策略(same-origin policy) csrf攻击防御核心点总结 django的cookie和session操作-7天免登录 flask操作cookie&django的see ...
- 12 Django之Cookie和Session
一.什么是Cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接 ...
- web框架开发-Django组件cookie与session
http协议的每一次都是无保存状态的请求,这会带来很多的不方便,比如,一刷新网页,或者进入该网页的其他页面,无法保存之前的登录状态.为了解决类似这样的问题,引入了会话跟踪 会话跟踪技术 1 什么是会话 ...
- 【转】Cookie/Session机制详解
Cookie/Session机制详解 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息 ...
- Django之Cookie、Session、CSRF、Admin
Django之Cookie.Session.CSRF.Admin Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...
- python 全栈开发,Day76(Django组件-cookie,session)
昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...
随机推荐
- 【learning】二分图最大匹配的König定理
[吐槽] 嗯好吧这个东西吧..其实是一开始做一道最小点覆盖的题的时候学到的奇妙深刻的东西 然后发现写了很长 然后就觉得不拎出来对不起自己呀哈哈哈哈 咳咳好的进入正题 [正题] 在这里码一下最小点覆盖的 ...
- log4j日志输出性能优化-缓存、异步
转载 1.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系 ...
- js备战春招の四の严格模式
JavaScript 严格模式(strict mode)即在严格的条件下运行. use strict 严格模式下你不能使用未申明的变量 "use strict" 指令只运行出现在脚 ...
- go学习(二)目录管理
1. go 环境变量 GOROOT golang 安装目录的绝对路径 GOPATH 工作目录(worksapce) GOBIN go install编译存放路径.不允许设置多个路径.可以为空.为空时则 ...
- Docker学习——pinpoint部署
Pinpoint Install pinpoint-server 下载镜像 docker pull yous/pinpoint 查看镜像 docker images 启动容器 docker run - ...
- Python函数学习——递归
递归函数 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 函数实现过程 def calc(n): v = int(n//2) print(v) if v > ...
- Centos7数据实时同步
Rsync+inotify 功能要求 通过rsync+inotify将数据库指定目录实时同步到备份服务器. 环境说明 M:192.168.10.11 数据库服务器 S:192.168.10.13 备份 ...
- Runtime的使用
一.RunTime简介 RunTime简称运行时.OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制. 对于C语言,函数的调用在编译的时候会决定调用哪个函数. 对于OC的函数,属于 ...
- Struts2 学习之小白开始
Struts2 基础知识学习总结 Struts2 概述:Struts2 是一个用来开发 MVC 应用程序的框架,他提供了 Web 应用程序开发过程中的一些常见问题的解决方案,比如对于用户输入信息合法性 ...
- FFmpeg视频处理
FFmpeg是一个用于音视频处理的自由软件,被广泛用于音视频开发.FFmpeg功能强大,本文主要介绍如何使用FFmpeg命令行工具进行简单的视频处理. 安装FFmpeg可以在官网下载各平台软件包或者静 ...