Django框架07 /cookie和session
Django框架07 /cookie和session
1. django请求生命周期
- 浏览器上输入http://www.xxx.com 请求到达django后发生了什么? (还有中间件,此处没写)
- web服务网关接口:wsgi、uwsgi
2. cookie
示例:博客系统
基本实现用户登录
用户未登录就不能访问指定页面
- 会话
- 客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。
- 基于cookie实现
- 保存在用户浏览器端的键值对,向服务端发请求时会自动携带。保存在用户浏览器端的键值对,向服务端发请求时会自动携带。
- 会话
后端操作cookie
清除chrome浏览器页面缓存和cookie:Ctrl + Shift + del
获取Cookie
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) # 参数:
# default: 默认值
# salt: 加密盐
# max_age: 后台控制过期时间
设置Cookie
rep = HttpResponse(...)
rep = render(request, ...) rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐', max_age=None, ...) # 参数:
# key, 键
# value='', 值
# max_age=None, 超时时间
# expires=None, 超时时间,值是一个datetime类型的时间日期对象,到这个日期就失效的意思
# path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
# domain=None, Cookie生效的域名
# secure=False, https传输
# httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
删除Cookie
def logout(request):
rep = redirect("/login/")
rep.delete_cookie("user") # 删除用户浏览器上之前设置的usercookie值
return rep
代码示例
def login(request):
# return HttpResponse('...')
# return render('...')
# return redirect('...')
# 设置cookie
data = redirect('...')
data.set_cookie()
# 读取cookie
request.COOKIES.get('xx')
return data # 三个参数:
key, value='', max_age=None
jquery操作cookie
操作cookie前准备
1.定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术; 2.下载与引入:jquery.cookie.js基于jquery;先引入jquery,再引入:jquery.cookie.js;下载:http://plugins.jquery.com/cookie/ 3.<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.cookie.js"></script>
添加cookie
// 1.添加一个"会话cookie"
$.cookie('the_cookie', 'the_value'); //这里没有指明 cookie有效时间,所创建的cookie有效期默认到用户关闭浏览器为止,所以被称为 “会话cookie(session cookie)”。 // 2.创建一个cookie并设置有效时间为 7天
$.cookie('the_cookie', 'the_value', { expires: 7 }); //这里指明了cookie有效时间,所创建的cookie被称为“持久 cookie (persistent cookie)”。注意单位是:天; // 3.创建一个cookie并设置 cookie的有效路径
$.cookie('the_cookie', 'the_value', { expires: 7, path: '/' }); //在默认情况下,只有设置 cookie的网页才能读取该 cookie。如果想让一个页面读取另一个页面设置的cookie,必须设置cookie的路径。cookie的路径用于设置能够读取 cookie的顶级目录。将这个路径设置为网站的根目录,可以让所有网页都能互相读取 cookie (一般不要这样设置,防止出现冲突)。
读取cookie
$.cookie('the_cookie');
删除cookie
$.cookie('the_cookie', null); //通过传递null作为cookie的值即可
可选参数
$.cookie('the_cookie','the_value',{
expires:7,
path:'/',
domain:'jquery.com',
secure:true
}) // expires:(Number|Date)有效期;设置一个整数时,单位是天;也可以设置一个日期对象作为Cookie的过期日期;
// path:(String)创建该Cookie的页面路径;
// domain:(String)创建该Cookie的页面域名;
// secure:(Booblean)如果设为true,那么此Cookie的传输会要求一个安全协议,例如:HTTPS;
注意点
// js操作
document.cookie = 'k1=liu;path=/'
// jquery操作
$.cookie('k1','liu',{path:'/'})
// 注意:path不同会导致设置不同. //path的作用
// / , 当前网站中所有的URL都能读取到此值.
// "",只能在当前页面访问的到此数据.
// /index/ ,只能在/index/xxx 的网页中查看. // 在浏览器操作cookie是路径path不写默认是""
3. session
基于session实现保留会话信息 / 推荐
什么是session
依赖cookie
是一种存储数据的方式,依赖于cookie,实现本质:
用户向服务端发送请求,服务端做两件事:
1.生成随机字符串;
2.为此用户开辟一个独立的空间来存放当前用户独有的值.
在空间中如何想要设置值:
request.session['x1'] = 123
request.session['x2'] = 456
在空间中取值:
request.session['x2']
request.session.get('x2')
视图函数中的业务操作处理完毕,给用户响应,在响应时会将随机字符串存储到用户浏览器的cookie中.
cookie和session的区别
答: cookie是存储在客户端浏览器上的键值对,发送请求时浏览器会自动携带. session是一种存储数据方式,基于cookie 实现,将数据存储在服务端(django默认存储到数据库).其本质是:
用户向服务端发送请求,服务端做两件事:生成随机字符串;为此用户开辟一个独立的空间来存放当前用户独有的值.
在空间中如何想要设置值:
request.session['x1'] = 123
request.session['x2'] = 456
在空间中取值:
request.session['x2']
request.session.get('x2')
视图函数中的业务操作处理完毕,给用户响应,在响应时会 将随机字符串存储到用户浏览器的cookie中.
django中session相关的配置 / 拓展
1.SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即: sessionid=随机字符串 2.SESSION_COOKIE_DOMAIN = None # api.baidu.com /www.baidu.com/ xxx.baidu.com 3.SESSION_COOKIE_PATH = "/" # Session的cookie 保存的路径 4.SESSION_COOKIE_HTTPONLY = True # 是否 Session的cookie只支持http传输,js获取不到 5.SESSION_COOKIE_AGE = 1209600 # Session的 cookie失效日期(2周) 6.SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期 7.SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存 # django中的session如何设置过期时间?
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)
django的session默认存储在数据库,可以放在其他地方吗
- 小系统:默认放在数据库即可.
- 大系统:缓存(redis)
- 放在文件中配置
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
SESSION_FILE_PATH = '/sessiondata/'
- 缓存(内存)
SESSION_ENGINE =
'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMem Cache',
'LOCATION': 'unique-snowflake',
}
}
- 缓存(redis)
SESSION_ENGINE =
'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
CACHES = {
default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
# "PASSWORD": "密码",
}
}
}
操作session
# 设置(添加&修改)
request.session['x1'] = 123
request.session['x2'] = 456 # 读取
request.session['xx']
request.session.get('xx') # 删除
del request.session['xx']
# 删除当前会话的所有Session数据
request.session.delete()
# 删除cookie以及session
request.session.flush()
request.session.keys()
request.session.values()
request.session.items()
request.session.session_key # 获取sessionid的值
request.session.set_expiry(value) # 设置会话Session和Cookie的超时时间
# 如果value是个整数,session会在些秒数后失效。
# 如果value是个datatime或timedelta,session就会在这个时间后失效。
# 如果value是0,用户关闭浏览器session就会失效。
# 如果value是None,session会依赖全局session失效策略。
4. 总结
cookie/session的应用场景
- 用户认证
- 投票
- 短信验证过期
- 权限管理
session中的数据是根据用户相互隔离.
# 示例
def login(request):
# 获取用户提交的用户名和密码
user = request.POST.get('user')
request.session['user_name'] = user
def index(request):
print(request.session['user_name'])
cookie代码示例
from django.shortcuts import render,redirect
from app01 import models def login(request):
"""
用户登录
:param request:
:return:
"""
if request.method == 'GET':
return render(request, 'login.html') # 获取用户提交的用户名和密码
user = request.POST.get('user')
pwd = request.POST.get('pwd') # 去数据库检查用户名密码是否正确的两种方式
# user_object = models.UserInfo.objects.filter(username=user,password=pwd).first()
# user_object = models.UserInfo.objects.filter(username=user, password=pwd).exists() user_object = models.UserInfo.objects.filter(username=user, password=pwd).first() if user_object:
# 用户登录成功
result = redirect('/index/')
result.set_cookie('xxxxxxxx',user)
return result # 用户名或密码输入错误
return render(request,'login.html',{'error':'用户名或密码错误'}) def index(request):
"""
博客后台首页
:param request:
:return:
"""
user = request.COOKIES.get('xxxxxxxx')
if not user:
return redirect('/login/') return render(request,'index.html',{'user':user})
session代码示例
from django.shortcuts import render,redirect from app01 import models def login(request):
'''
用户登陆
:param request:
:return:
'''
if request.method == 'GET':
return render(request,'login.html')
user = request.POST.get('username')
pwd = request.POST.get('password')
ret = models.UserInfo.objects.filter(username=user,password=pwd).first()
if ret:
request.session['user_name'] = ret.username
return redirect('/index/')
return render(request,'login.html',{'error':'用户名或密码错误'}) #构建装饰器
import functools
def auth(f):
@functools.wraps(f)
def inner(request,*args,**kwargs):
user = request.session.get('user_name')
if not user:
return redirect('/login/')
return f(request,*args,**kwargs)
return inner @auth
def index(request):
'''
博客后台首页
:param request:
:return:
'''
return render(request,'index.html')
Django框架07 /cookie和session的更多相关文章
- Django框架 之 Cookie、Session整理补充
Django框架 之 Cookie.Session整理补充 浏览目录 Django实现的Cookie Django实现的Session 一.Django实现的Cookie 1.获取Cookie 1 2 ...
- Django框架 之 Cookie和Session初识
Django框架 之 Cookie和Session初识 浏览目录 Cookie介绍 Django中的Cookie Session 一.Cookie介绍 1.Cookie产生的意义 众所周知,HTTP协 ...
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
- Django框架之cookie和session及开发登录功能
1.cookie是什么? Web应用程序是使用HTTP协议传输数据的.HTTP协议是无状态的协议.一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接.这就意味着服务器无法从 ...
- {Django基础八之cookie和session}一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session
Django基础八之cookie和session 本节目录 一 会话跟踪 二 cookie 三 django中操作cookie 四 session 五 django中操作session 六 xxx 七 ...
- 【python】-- Django 分页 、cookie、Session、CSRF
Django 分页 .cookie.Session.CSRF 一.分页 分页功能在每个网站都是必要的,下面主要介绍两种分页方式: 1.Django内置分页 from django.shortcuts ...
- 第三百一十二节,Django框架,Cookie
第三百一十二节,Django框架,Cookie 注意:获取Cookie是在请求对象里处理,设置Cookie是在响应对象里处理 普通Cookieset_cookie()设置普通cookie 参数: ke ...
- Django中的cookie与session
cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空间中. 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来 ...
- django基础 -- 8.cookie 和 session
一. cookie 1.cookie 的原理 工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容, 浏览器收到相应后保存在本地:当浏览器再次访问时,浏览器会自动带上Cooki ...
随机推荐
- 【MySQL】究竟什么是MVCC呢?
MVCC是什么呢? MVCC其实就是一个多版本并发控制,即多个不同版本的数据实现并发控制的技术,其基本思想是为每次事务生成一个新版本的数据, 在读数据时选择不同版本的数据即可以实现对事务结果的完整性读 ...
- numpy(深)复制一个矩阵的方法
在用Python写代码的时候往往会遇到真复制和假复制的问题,真复制就是创建一个新的实例(instance),而假复制就是把原对象的引用赋给了新的标志符.判断是不是真复制可以使用id()这个函数. 当然 ...
- Charles 功能详解
Charles的功能有? 1 抓取http和https 网络封包(抓包) 2 Charles 的断点请求 通过断点修改参数 在指定接口打上断点 右键点击接口选择 breakpoints 然后 导航栏 ...
- Java基础-Java中transient有什么用-序列化有那几种方式
此文转载于知乎的一篇文章,看着写的非常全面,分享给大家. 先解释下什么是序列化 我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术. Java序列化 ...
- spring boot actuator端点高级进阶metris指标详解、git配置详解、自定义扩展详解
https://www.cnblogs.com/duanxz/p/3508267.html 前言 接着上一篇<Springboot Actuator之一:执行器Actuator入门介绍>a ...
- Downloadmanager实现app实现的升级下载使用
1.app升级下载现在不推荐使用downloadmanager下载: 原因有下面的几个方面: (1)三星note系列部分手机需要手动打开这个权限才能用这个功能,而有些国产手机更加nb了直接个阉割了(d ...
- 用一杯茶时间搭建Gitea服务器
一.简单介绍 Gitea搭建局域网内的基于git的代码托管服务器,可以实现的功能包括:组织管理.团队管理.组织仓库设定.团队仓库分配.组织及团队权限分配管理.仓库添加PC协作者.仓库添加组织团队.分 ...
- 《HelloGitHub》第 51 期
兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...
- python创建DataFrame,并实现DataFrame的转置
>>> import pandas as pd >>> import numpy as np >>> x1 = {1: 106, 2: 3, 7: ...
- List<List<Object>> list = new ArrayList<List<Object>>(); 求回答补充问题 list.get(position).add(Object);为什么会报错啊我想在对应的list里面添加对象
public static void main(String[] args){ List<List<Object>> list = new ArrayList<List& ...