cookie

保存在用户浏览器端的一个键值对(别人给的凭证)

服务端可以向用户浏览器写cookie

客户端每次发请求会携带cookie去(放在请求头里面)

淘宝的cookie  京东的cookie(http的连接很简单,是无状态的,为了登录后下次来还认识,也为了避免再次登录)

功能:1.一段时间内免登录  2.浏览器自动记住账号密码  3.修改每次看的页数(只用修改一次)

禁用浏览器的cookie(无限投票例子)

用户第一次请求时候后端处理代码

def login(request):
if request.method=="GET":
return render(request,'登录界面')
else:
user=request.POST.get('username')
pwd=request.POST.get('password')
print(user,pwd)
if user=='akagi' and pwd== '521':
obj=redirect('用户后台')
#obj.set_cookie('ticket','sdfasdas',max_age=10,path='/')#max_age=10 十秒后cookie失效 里面的path属性指定这个cookie内容在哪个url生效
obj.set_signed_cookie('ticket','19438',salt='jjjjjj',max_age=10)#cookie加密(签名)需要做异常处理 解密解密p57
#set_cookie(self, key, value='', max_age=None, expires=None, path='/',
# domain=对域名划分sso, secure=https相关, httponly=安全相关js代码无法获取到, samesite=??):
return obj
else:
return render(request, '登录界面')

后端会检查用户请求的时候是否带有相关的cookie,有则通过再做其他操作,无则返回登录界面

def classes(request):
try:
#tk=request.COOKIES.get('ticket') #自定义名字
tk=request.get_signed_cookie('ticket',salt='jjjjjj') #=加密时候salt要对应 签名
except KeyError:
return redirect('/login/')
#print('tk=',tk)
if not tk:
return redirect('/login/')

session(推荐)

保存在服务器端的数据(本质是键值对)

应用的时候依赖于cookie

作用:保持会话( Web网站)

好处:敏感信息不会直接给客户端(cookie容易被伪造,即使签了名也能被破解,因为数据在浏览器端)

原理:用户请求,返回一串随机字符串,然后服务端也保存这个随机字符串为key,一个字典为value(里面可以记录各种数据)

用户第一次请求时候后端处理代码

def session_login(request):
if request.method=='GET':
return render(request,'session.html')
else:
u=request.POST.get('user')
p=request.POST.get('pwd')
obj=models.UserAdmin.objects.filter(username=u,password=p).first()
if obj:
#1.生成随机字符
#2.通过cookie发给客户端
#3.服务端保存(随机字符串1,{'username':'qwe',} ;下次验证两端各一份) 对应cookie里面的sessionid
#(数据,类似键值对 放到数据库表里面了)
request.session['username']=obj.username #做三件事123 键值对
request.session['password'] = obj.password
#随着增加的键值对越多,数据库session_key不变,session_data变长
request.session['email'] = 'love@qq.com'
request.session.set_expiry(5) #设置失效时间
# * 如果value是个整数,session会在些秒数后失效(适用于整个Django框架,即这个数值时效时整个页面都会session失效)。
#* 如果value是个datatime或timedelta,session就会在这个时间后失效。
#* 如果value是0,用户关闭浏览器session就会失效。
#* 如果value是None,session会依赖全局session失效策略。
return redirect('/indexxx/')
else:
return render(request,'session.html',{'message':'请重新登录'})

对session验证

def indexxx(request):
#1.获取客户端cookie种的随机字符串
#2.去session种查找有没有随机字符
#3.去session中查看对应key的value中是否有值
v=request.session.get('username') #获取session里面key为username的value
s=request.session.session_key
b=request.session.values()
print(s)
if v:
return HttpResponse('ok,登录成功:%s---%s----%s' %(v,s,b))
else:
return redirect('/session_login/')

PS:

DJANGO 设置SESSION过期时间

cookie和session的详解与区别

Django-----cookie&session的更多相关文章

  1. Django Cookie Session和自定义分页

    Django中操作Cookie 获取Cookie request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, ...

  2. django cookie session 自定义分页

    cookie cookie的由来 http协议是无状态的,犹如人生若只如初见,每次都是初次.由此我们需要cookie来保持状态,保持客户端和服务端的数据通信. 什么是cookie Cookie具体指的 ...

  3. day55:django:cookie&session

    目录 1.Cookie 1.Cookie前戏 2.Cookie的引入 3.django中操作cookie 2.Session 1.cookie的局限性 2.session技术 3.django操作se ...

  4. Django Cookie,Session

    Cookie Cookie的由来 HTTP协议是无状态的,每次请求都是独立的,对服务器来说,每次的请求都是全新的,上一次的访问是数 据是无法保留到下一次的 某些场景需要状态数据或者中间数据等相关对下一 ...

  5. django cookie session操作

    Cookie是什么? cookie说的直白点就是保存在用户浏览器端的一个键值对,举个例子,你现在登录了京东商城,你把浏览器关闭之后,你再打开京东,你还是可以对你的账户继续操作,已经购买的商品,订单都是 ...

  6. django cookie,session,auth

    一.最完美的auth auth_user 是用来存储的用户注册的username,password auth 首先需要引入模块 from django.contrib import auth 用户认证 ...

  7. Python Web框架篇:Django cookie和session

    part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...

  8. 浅析Django之session与cookie

    浅析Django之session与cookie 1 session与cookie概述 原理: 由于HTTP协议是无状态,无连接的,当用户发起网路请求时,需要服务端能标识用户ID,用以存储用户相关信息, ...

  9. python Django cookie和session

    在一个会话的多个请求中共享数据,这就是会话跟踪技术.例如在一个会话中的请求如下:  请求银行主页: 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参 ...

  10. django - 总结 - cookie|session

    Cookie是通过HTTP请求和响应头在客户端和服务器端传递的. 在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术. --------------------- ...

随机推荐

  1. 怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当前用户 id?查看指定帮助用什么命令?

    清屏:clear 退出当前命令:ctrl+c 彻底退出 执行睡眠 :ctrl+z 挂起当前进程 fg 恢复后台 查看当前用户 id:"id":查看显示目前登陆账户的 uid 和 g ...

  2. @RequestMapping 注解?

    该注解是用来映射一个URL到一个类或一个特定的方处理法上.

  3. mysql问题排查与性能优化

     MySQL 问题排查都有哪些手段? 使用 show processlist 命令查看当前所有连接信息. 使用 explain 命令查询 SQL 语句执行计划. 开启慢查询日志,查看慢查询的 SQL. ...

  4. 学习Haproxy (八)

    Unix套接字命令(Unix Socket commands) socat是一个多功能的网络工具,名字来由是"Socket CAT",可以看作是netcat的N倍加强版,socat ...

  5. SQL数据库之IFNULL函数和NULLIF函数

    学习IFNULL()函数 非空判断 解析 IFNULL(expression1, expression2) 如果expression1为null, 在函数返回expression2,否则将返回expr ...

  6. 当心,你搞的Scrum可能是小瀑布

    摘要:有的团队刚接触Scrum,一个问题令他们很困扰:迭代初期开发人员的工作较多,测试人员闲着:迭代末期开发人员闲着,测试人员的工作比较多,怎么解决资源等待的问题呢? 本文分享自华为云社区<当心 ...

  7. 小程序wx.getRecorderManager()录音管理

    小程序中提供了两种录音的API,wx.startRecord和wx.getRecorderManager(),前一个现在微信团队已经不再维护,所以在这里写一下新的录音管理,比之前要强大 1.小程序录音 ...

  8. Reflect.has检测对象是否拥有某个属性

    Reflect.has({x: 0}, 'x'); // true Reflect.has({x: 0}, 'y'); // false // returns true for properties ...

  9. MySQL 中的 SQL 语句详解

    @ 目录 总结内容 1. 基本概念 2. SQL列的常用类型 3. DDL简单操作 3.1 数据库操作 3.2 表操作 4. DML操作 4.1 修改操作(UPDATE SET) 4.2 插入操作(I ...

  10. Ubuntu安装开发者平台Backstage

    Ubuntu安装开发者平台Backstage 什么是Backstage? Backstage是一个构建开发者门户的开源平台.通过支持一个集中的软件分类,Backstage可以保存并发布你的微服务和基础 ...