Django中的cookie与session
cookie与session的实现原理
HTTP被设计为”无状态”,每次请求都处于相同的空间中。 在一次请求和下一次请求之间没有任何状态保持,我们无法根据请求的任何方面(IP地址,用户代理等)来识别来自同一人的连续请求。上图很明显的展示了Django的session与cookie的实现原理。服务器会生成两份相同的cookie字符串,一份保存在本地,一份发向请求的浏览器。浏览器将收到的cookie字符串保存下来,当下次再发请求时,会将信息与这段cookie一同发送到服务器,服务器得到这段cookie会与本地保存的那份判断是否相同,如果相同就表示用户已经登录成功,保存用户登录成功的状态。Django的session保存在数据库中的数据相当于一个大字典,key为cookie的字符串,value仍是一个字典,字典的key和value为用户设置的相关信息。这样就可以方便的存取session里面的信息。
Cookies
cookies 是浏览器为 Web 服务器存储的一小段信息。 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies。它保存在浏览器下的某个文件夹下。
浏览器下的cookie:
Session
Django的Session机制会向请求的浏览器发送cookie字符串。同时也会保存到本地一份,用来验证浏览器登录是否为同一用户。它存在于服务器,Django默认会把session存入到数据库中。
Session依赖于Cookie,如果浏览器不能保存cooki那么session就失效了。因为它需要浏览器的cooki值去session里做对比。session就是用来在服务器端保存用户的会话状态。
操作session
根据网友lvusyy的友情提示,在操作session之前,你需要同步一下Django的数据库。我用的是Django自带的sqlite3.所以需要执行同步的命令:
还有一点,在django处理请求的过程中,需要经过中间件的过滤,涉及到跨站请求伪造时,django会把请求阻止过滤掉,所以我们要在setting.py中禁用跨站请求伪造的中间件,如果不禁用,记得好像会报一个403的错误黄页。关于跨站请求伪造,之后的章节我会详细说明其功能用处:
Django中操作session:
获取session:request.session[key] request.session.get(key)
设置session:reqeust.session[key] = value
删除session:del request[key]
request.session是每一个客户端相当于在上图中对应的value
一段简单的Django中实现session的代码,判断用户是否已经成功登录:
1 def login(request): 2 if request.method =='POST': 3 username = request.POST.get('username') 4 pwd = request.POST.get('pwd') 5 if username =='lisi' and pwd == '12345': 6 request.session['IS_LOGIN'] = True 设置session 7 return redirect('/app01/home/') 8 9 return render(request,'login.html') 10 11 def home(request): 12 is_login = request.session.get('IS_LOGIN',False) 获取session里的值 13 if is_login: 14 return HttpResponse('order') 15 else: 16 return redirect('/app01/login/')
过期时间
cookie可以有过期时间,这样浏览器就知道什么时候可以删除cookie了。 如果cookie没有设置过期时间,当用户关闭浏览器的时候,cookie就自动过期了。 你可以改变 SESSION_EXPIRE_AT_BROWSER_CLOSE 的设置来控制session框架的这一行为。缺省情况下, SESSION_EXPIRE_AT_BROWSER_CLOSE 设置为 False ,这样,会话cookie可以在用户浏览器中保持有效达 SESSION_COOKIE_AGE 秒(缺省设置是两周,即1,209,600 秒)。 如果你不想用户每次打开浏览器都必须重新登陆的话,用这个参数来帮你。如果 SESSION_EXPIRE_AT_BROWSER_CLOSE 设置为 True ,当浏览器关闭时,Django会使cookie失效。
SESSION_COOKIE_AGE:设置cookie在浏览器中存活的时间
在settings.py中添加:
例子
结合前端实现的cookie与session会话机制:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <form action="/app01/login/" method="post"> 9 <input type="text" name="username" /> 10 <input type="password" name="pwd" /> 11 <input type="submit" value="submit"/> 12 </form> 13 14 </body> 15 </html>
login.html
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title></title><style>.header{height: 48px;}</style> </head> <body><div class="header"><div style="float: right">{{ username }}</div><div style="float: right"><a href="/app01/logout/">注销</a></div></div><div style="height: 500px;background-color: #ddd"></div> </body> </html>
home.html
views.py
def login(request):if request.method == "POST":username = request.POST.get('username')pwd = request.POST.get('pwd')if username == 'alex' and pwd == '123':request.session['IS_LOGIN'] = Truerequest.session['USRNAME'] = 'alex'return redirect('/app01/home/')elif username == 'eirc' and pwd == '123':request.session['IS_LOGIN'] = Truerequest.session['USRNAME'] = 'eirc'return redirect('/app01/home/')return render(request, 'login.html')def home(request):is_login = request.session.get('IS_LOGIN', False)if is_login:username = request.session.get('USRNAME', False)return render(request, 'home.html', {'username': username})else:return redirect("/app01/login/")
转载于:https://www.cnblogs.com/chenchao1990/p/5283725.html
Django中的cookie与session相关推荐
- Django 中的 cookie 和 session
一.cookie 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网站.目前最新的 ...
- Django学习之Cookie和Session
一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...
- Day 63 django 中间件、cookie、session
Day 63 django 中间件.cookie.session 文章目录 Day 63 django 中间件.cookie.session 1.cookie与session 简介 2.django操 ...
- java中的Cookie是什么_第74节:Java中的Cookie和Session
第74节:第74节:Java中的Cookie和Session ServletContext: 什么是ServletContext,有什么用哦,怎么用呢? 启动服务器后,会给每个应用程序创建一个Serv ...
- Django框架(21.Django中设置cookie以及获取cookie)
状态保持 http协议是无状态的.下一次去访问一个页面时并不知道上一次对这个页面做了什么 Cookie 1.cookie是由服务器生成,存储在浏览器端的一小段文本信息. 2.cookie的特点: 以键 ...
- Django:Admin,Cookie,Session
一. Admin的配置 1.Admin基础设置 admin是django强大功能之一,它能够从数据库中读取数据,呈现在页面中,进行管理.默认情况下,它的功能已经非常强大,如果你不需要复杂的功能,它已经 ...
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
- 小白学Django第九天| Cookie和session的那些骚操作
点击上方"JAVAandPython君",选择"星标"公众号 重磅干货,第一时间送达 小白学Django系列: 小白学Django第一天| MVC.MVT以及D ...
- koa中使用cookie 和session
在koa中使用cookie app.keys = ['im a newer secret'] //设置签名的 Cookie 密钥. // 设置cookie app.use(async ctx => ...
最新文章
- C语言中整型浮点型在计算机中的存储
- 程序员真香!IT 业 2020 年平均工资最高
- Servlet Cookie处理
- 结构体序列为JSON
- vue之slot用法
- css3动画应用-音乐唱片旋转播放特效
- 【目标检测】ATSS: bridging the gap between anchor-based and anchor-free detection via ATSS (cvpr20)
- 【转】Mac本地生成SSH Key 的方法
- undefined reference to `pthread_create‘(linux下Clion使用thread报错)
- 中label换行问题_如何巧妙处理 Git 多平台换行符问题(LF or CRLF)
- UniWebView3 使用中遇到的坑
- RHEL 7 使用 CentOS 源安装 docker ce
- 手机模拟器自带root_VMOS Pro Android 手机上的模拟器 (手机版虚拟机)
- 短文本分类---小白从0到0.3的辛酸历程(上)
- badboy设置中文_badboy中文手册
- 数据结构与算法 知识点总结(中)---线性表,堆栈,队列
- python wms系统源码_jeewms仓库管理系统 v2.4.0
- php 执行opcode,PHP编译原理之Opcode ( Operation Code ) PHP代码执行过程
- 英特尔服务器cpu型号大全,Intel桌面处理器规格表
- Rust : calls in constant functions are limited to constant functions, tuple structs and tuple varian
热门文章
- 20个很有帮助的 Web 前端开发教程
- python处理子进程_Python多处理+子进程问题
- python一对一_Python:在数据存储区中建立一对一的关系
- html5选择试题及答案,全套html5面试题大全带答案
- linux内核实现ipsec,基于IPv6的IPSec原理分析和在Linux内核中的实现
- php nowdoc用来做什么,PHP中nowdoc和heredoc使用需要注意的一点
- java选择结构二星期几_java4选择结构 二
- python3.6安装cv2库_win10 +python3.6环境下安装opencv以及pycharm导入cv2有问题的解决办法...
- SpringBoot四大核心之starter——自定义starter
- 机器学习——数据预处理