day09 Django: 组件cookie session
一.cookie和session都是会话跟踪技术
1.什么是会话
可以理解为客户端和服务端之间的一次会晤: 在一次会晤中可能包含多次请求和响应
2.何时关闭会话
3.什么是会话跟踪技术
在一个会话中的多个请求共享数据, 这就是会话跟踪技术: 一般共享的数据是用户信息
4.为什么要有cookie和session
因为http协议是无状态协议: 也就是说每个请求都是独立的, 无法记录前一次的请求状态相关的任何信息, 为的是快, 所以不保存
二.Django组件: cookie
1.cookie是什么?
针对每一个服务器, 存储在客户端浏览器上的key: value结构{ }
浏览器: 对一个文件的维护, key: value格式保存
浏览器: 第一次请求: 带个空的cookie去访问服务器, 如果认证成功, 服务器会向cookie里写键值: set_cookie: key:value
浏览器: 第二次请求: 带cookie去访问服务器,如果有服务器认可的键值: key:value, 服务器做相应的响应
2.cookie的设置和获取
1.服务器设置cookie: 给浏览器的cookie设置键值对 key: value, 过期时间默认是2周
obj = HttpResponse('ok')
obj.set_cookie("username", user)
2.服务器获取cookie: {}
request.COOKIES
is_login = request.COOKIES.get('is_login')
views.py
from django.shortcuts import render, redirect, HttpResponse
def login(request):
if request.method == "GET":
return render(request, 'login.html', locals())
else:
user = request.POST.get('user')
pwd = request.POST.get('pwd')
print(user, pwd)
if user == 'bajie' and pwd == '123':
obj = HttpResponse('ok')
obj.set_cookie("username", user)
obj.set_cookie("is_login", True)
return obj
else:
return HttpResponse('fail')
def index(request):
print(request.COOKIES)
is_login = request.COOKIES.get('is_login')
user = request.COOKIES.get('username')
if is_login:
return render(request, 'index.html', locals())
else:
return redirect('/login/')
3.cookie规范(http)
cookie大小上限为4kb
一个服务器最多在浏览器上保存20个cookie键值对
一个浏览器最多保存300个cookie
浏览器自己的cookie,为了竞争,在http规范的基础上有所'扩展'
不同浏览器之间cookie是不共享的
4.cookie的过期时间设置:
obj = redirect('/index/')
obj.set_cookie("username", user, max_age=180) #过期时间: 单位秒
5.cookie的删除
obj = redirect('/index/')
obj.delete_cookie("username")
views.py: 比上面的例子多个数据库验证
from django.shortcuts import render, redirect, HttpResponse
from app01.models import UserInfo
def login(request):
if request.method == "GET":
return render(request, 'login.html', locals())
else:
user = request.POST.get('user')
pwd = request.POST.get('pwd')
print(user, pwd)
user_obj = UserInfo.objects.filter(user=user, pwd=pwd).first()
if user_obj:
obj = redirect('/index/')
obj.set_cookie("username", user, max_age=180)
obj.set_cookie("is_login", True)
return obj
else:
return HttpResponse('fail')
def index(request):
print(request.COOKIES)
is_login = request.COOKIES.get('is_login')
user = request.COOKIES.get('username')
if is_login:
return render(request, 'index.html', locals())
else:
return redirect('/login/')
三.Django组件: session
1.cookie的问题
所有的信息保存在客户端, 不安全
每次请求都会带cookie过去, 浪费资源
2.session是什么?
session是服务端的技术: 服务器在运行时可以为每一个用户创建一个独享的session对象
服务器: 对一个文件的维护, key: value格式保存
浏览器: 第一次请求: 带个空的cookie去访问服务器,(因为session是基于cookie实现的) 如果认证成功, request.session['is_login'] = True 服务器会做两件事:
第一件事: 写session:
比如django是写到django-session表里: 把生成随机字符串作为key
把我们设置的键值对作为value,做完摘要插入表中
第二件事: 写cookie: 把"sessionid"作为key, 把session的"key"作为value
浏览器: 第二次请求: 带cookie去访问服务器,只有一个键值对 cookie:{"sessionid": "随机字段"}
3.session的设置与获取
1.服务器设置session
request.session['is_login'] = True
2.服务器获取session
request.session.get('username') #1.取sessionid #2.去django_session表中过滤sessionid的记录 #3.把session_data拿出来,反序列化
views.py
from django.shortcuts import render, redirect, HttpResponse
from app01.models import UserInfo
def index(request):
user = request.session.get('user')
is_login = request.session.get('is_login')
if not is_login:
return redirect('/login/')
else:
return render(request, 'index.html', locals())
def login(request):
if request.method == "GET":
return render(request, 'login.html', locals())
else:
user = request.POST.get('user')
pwd = request.POST.get('pwd')
print(user, pwd)
user_obj = UserInfo.objects.filter(user=user, pwd=pwd).first()
if user_obj:
request.session["user"] = user
request.session['is_login'] = True
return redirect('/index/')
else:
return HttpResponse('fail')
def logout(request):
request.session.flush()
return redirect('/login/')
4.session的删除
request.session.flush() #1.取sessionid #2.过滤出sessionid对应的表记录,删掉 #3.删掉cookie
5.同一个浏览器访问同一个服务器, 多个账号登录时出现的问题:
1.第一个用户登录,带空cookie过去: 服务器写session, 写cookie, 没有问题
2.但是第二个用户登录, 或者同一个用户重复登录: 那么写的session很快会写爆,所以django给我们做了这么一件事,
当第一次登录时,正常写session,正常写cookie
当第二次登录时,cookie不变: {"sessionid":"随机字符串"}, session的表django_session里面的key不变,只update对应的values
session的一条记录只对应一个浏览器
- python 全栈开发,Day76(Django组件-cookie,session)
昨日内容回顾 1 json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() ...
- Django组件-cookie,session
昨日内容回顾: json 轻量级的数据交换格式 在python 序列化方法:json.dumps() 反序列化方法:json.loads() 在JS中: 序列化方法:JSON.stringfy() 反 ...
- Django组件 - cookie、session、用户认证组件
一.cookie 1.会话跟踪技术 1)什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话 ...
- Django组件-cookie与session
一.会话跟踪技术 1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而 ...
- web框架开发-Django组件cookie与session
http协议的每一次都是无保存状态的请求,这会带来很多的不方便,比如,一刷新网页,或者进入该网页的其他页面,无法保存之前的登录状态.为了解决类似这样的问题,引入了会话跟踪 会话跟踪技术 1 什么是会话 ...
- Django 组件-cookie与session
Cookie概述 什么叫Cookie Cookie翻译成中文是小甜点,小饼干的意思.在HTTP中它表示服务器送给客户端浏览器的小甜点.其实Cookie是key-value结构,类似于一个python中 ...
- Django 组件-cookie 与 session
会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...
- Django组件——cookie与session
一.会话跟踪技术 1.什么是会话跟踪技术 可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应. 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直 ...
- 13 Django组件-cookie与session
会话跟踪技术 1 什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10 ...
随机推荐
- Linux centosVMware Linux监控平台介绍、zabbix监控介绍、安装zabbix、忘记Admin密码如何做
一.Linux监控平台介绍 cacti.nagios.zabbix.smokeping.open-falcon等等 cacti.smokeping偏向于基础监控,成图非常漂亮 cacti.nagios ...
- selenium抓取淘宝数据报错:warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless
ssh://root@192.168.33.12:22/root/anaconda3/bin/python3 -u /www/python3/maoyantop100/meishi_selenium. ...
- 为U盘装备Ubuntu工作学习两不误
题记: 在上一篇文章中,我介绍了让Ubuntu 10.04完美支持Thinkpad小红点Trackpoint.看上去,显得有些不痛不痒,实际上有些同学会因为小红点中键不能正常使用,而放弃在Th ...
- java程序员,英语那点事
本文选自<Java程序员,上班那点事儿>有时候如果应聘到了一个有外资背景的公司或者这个公司的很多人都有海外或外资工作背景时,你 也许还会用到一些日常工作交流时候的词汇. 比如 ...
- 更换JAVA程序的界面风格
/*这个程序主要更换JAVA的界面风格的 * 后两个Mac,CTK风格要在相关的操作系统上才能实现 */import java.awt.*;import javax.swing.*;import ja ...
- 分析一次double强转float的翻车原因(转载)
https://www.cnblogs.com/CoderAyu/p/11489577.html float只能保证7位有效数字. double d = 8345933; float f = (flo ...
- python 网络爬虫(三)
一.网站地图爬虫 在一个简单的爬虫中,我们将使用实例网站 robots.txt 文件中发现的网站地图来下载所有网站,为了解析网站地图,我们将会使用一个简单的正则表达式,从<loc>标签中提 ...
- keep-alive的使用
<keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM. <router-view>中间为组件</router-view&g ...
- windows系统 安装与配置zabbix-agent
1.下载安装包 http://192.168.130.150/zabbix/zabbix_agent-4.0.12-win-amd64-openssl.msi 下载包的链接地址 windowszabb ...
- token和session的区别
session和token都是用来保持会话,功能相同 一.session机制,原理 session是服务端存储的一个对象,主要用来存储所有访问过该服务端的客户端的用户信息(也可以存储其他信息),从而实 ...