cookie和seesion以及token 技术都基于状态保持,

cookie:

​ 有服务器生成, 以 k:v 形式保持在浏览器端,下次请求服务器,附带cookie信息;存在恶意修改可能;可以对cookie进行加码;cookie 是不可跨域的;

cookie只能保存ASCII字符串

使用:

a).会话状态管理(如用户登录状态,购物车,游戏分数或其它需要记录的信息)

b).个性化设置(如用户自定义设置,主题等)

c).浏览器行为跟踪(如跟踪分析用户行为等

Python对cookie操作:

# 获取cookiePython
request.COOKIES['key']
# 设置cookie
必须使用response
reponse.set_cookie(key,value) # 删除cookie
必须使用response
respnse.delete_cookie("key")

session:

​ 为了解决cookie存储的安全性,在服务器进行状态保持一种方式,认证登陆用户生成一个sessionID,浏览器一般采用cookie的方式保存;但会增加服务器开销,影响服务器的扩张,跨域资源共享 CORS,CSRF跨站请求伪造

请求过程:

1 第一次访问服务器,会根据用户提交信息,创建对于session,并返回浏览器 ,会将信息存在cookie中,cookie会记录是那个域名的;

2 第二访问服务器是请求会自动查看有此域名有没有cookie信息,存在就发送服务器,服务器端从cookie中获取session。

# 获取、设置、删除Session中数据

request.session['k1']

request.session.get('k1',None)

request.session['k1'] = 123

request.session.setdefault('k1',123) # 存在则不设置

del request.session['k1']

# 所有 键、值、键值对

request.session.keys()

request.session.values()

request.session.items()

request.session.iterkeys()

request.session.itervalues()

request.session.iteritems()

# 会话session的key

request.session.session_key

# 将所有Session失效日期小于当前日期的数据删除

request.session.clear_expired()

# 检查会话session的key在数据库中是否存在

request.session.exists("session_key")

# 删除当前会话的所有Session数据

request.session.delete()

  

# 删除当前的会话数据并删除会话的Cookie。

request.session.flush() 

    这用于确保前面的会话数据不可以再次被用户的浏览器访问

    例如,django.contrib.auth.logout() 函数中就会调用它。

# 设置会话Session和Cookie的超时时间

request.session.set_expiry(value)

    * 如果value是个整数,session会在些秒数后失效。

    * 如果value是个datatime或timedelta,session就会在这个时间后失效。

    * 如果value是0,用户关闭浏览器session就会失效。

    * 如果value是None,session会依赖全局session失效策略。
def auth(func):
''' 装饰器,检查当前游览器cookies里logname是否存在已登录的帐号,如果存在,则继续执行下面的函数,返回计划进入的url'''
def inner(request,*args,**kwargs):
v = request.COOKIES.get('logname')
if not v:
return redirect('/')
return func(request,*args,**kwargs)
return inner def login(request):
'''登录url '''
if request.method == 'GET':
return render(request,'login.html') def index(request):
if request.method == 'GET':
'''get模式,获取cookies的logname帐号名,如果为空则返回登录页面 '''
u = request.COOKIES.get('logname')
if not u:
return redirect('/')
if request.COOKIES['logname'] == 'admin':
alluser = models.UserName.objects.exclude(uname='admin')
else:
# loguser = request.session['username']
loguser = request.COOKIES['logname']
alluser = models.UserName.objects.filter(uname=loguser)
return render(request, 'index.html', {'u_list': alluser})
if request.method == 'POST':
'''帐号登录验证 '''
logname = request.POST.get('logname',None)
logpwd = request.POST.get('logpwd',None)
if models.UserName.objects.filter(uname=logname):
if models.UserName.objects.filter(uname=logname,upwd=logpwd):
# 登录验证成功,重写cookie的登录帐号,延时10秒
response = HttpResponse('ok')
response.set_cookie('logname',logname,max_age=10)
return response
else:
return HttpResponse('pwderr')
else:
return HttpResponse('nmerr') @auth # 装饰器,在访问url为account时候,验证帐号是否为登录状态
def account(request):
if request.method == 'GET':
return render(request,'account.html')
'

[](javascript:void(0)

实例:CBV通过装饰器实现用户登录认证

[](javascript:void(0)

from django import views
from django.utils.decorators import method_decorator
@method_decorator(auth,name='dispatch')
class Order(views.View):
def get(self,request):
v = request.COOKIES.get('logname')
return render(request,'index.html',{'current_user':v}) def post(self,request):
v = request.COOKIES.get('logname')
return render(request,'index.html',{'current_user':v})

[](javascript:void(0)

token:

uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)

token 身份验证的过程:

​ 1用户通过用户名和密码发送请求

​ 2服务器程序验证,返回一个签名的token给客户

​ 3 客户端存储token,每次用于发送请求

​ 4 服务器端验证token并返回数据

1 服务器属性必须 ACAO,

cookie和session以及token的更多相关文章

  1. Cookie、Session 和 Token区别

    1 Cookie.Session 和 Token 都是用来做持久化处理的,目的就是让客户端和服务端相互认识.Http 请求默认是不持久的没有状态的,谁也不认识谁.   2 Cookie: 是存放在客户 ...

  2. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token

    为什么你学不会递归?告别递归,谈谈我的一些经验   可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...

  3. cookie、session、token区分

    https://www.cnblogs.com/moyand/p/9047978.html http://www.cnblogs.com/JamesWang1993/p/8593494.html Co ...

  4. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    本文引用了简书作者“骑小猪看流星”技术文章“Cookie.Session.Token那点事儿”的部分内容,感谢原作者. 1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动 ...

  5. cookie、session、token的区别与联系

    https://www.cnblogs.com/moyand/p/9047978.html cookie.session.token存在意义 http协议是无状态协议,请求之间是没有联系的,cooki ...

  6. cookie、session和token的概念

    Cookie.Session和Token都是为了解决Web身份校验而产生的,这里对它们的概念做一个简单了解. Web身份校验的发展 很久很久以前,Web基本上就是文档的浏览而已.既然是浏览,作为服务器 ...

  7. 一问带你区分清楚Authentication,Authorization以及Cookie、Session、Token

    上周写了一个 适合初学者入门 Spring Security With JWT 的 Demo .Demo 地址:https://github.com/Snailclimb/spring-securit ...

  8. 理解cookie,session,token

    彻底理解cookie,session,token 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新 ...

  9. 理解 Cookie,Session,Token 并结合 Redis 的使用

    Http 协议是一个无状态协议, 客户端每次发出请求, 请求之间是没有任何关系的.但是当多个浏览器同时访问同一服务时,服务器怎么区分来访者哪个是哪个呢? cookie.session.token 就是 ...

  10. Cookie,Session,Token详解

    Cookie,Session,Token详解 Cookie : ​ 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. ​ Cookie由服务器生成,发 ...

随机推荐

  1. epub文件如何查看

    http://epub-reader.online/# 你可以用在线的epub阅读器查看. 你可以使用本地的epub阅读器查看.如neatReader,wps. 你可以将epub转换成pdf,然后查看 ...

  2. Web 开发的常规流程

    Web 开发的常规流程 What is the Web? 简单地说,网络是一个遍布全球的网络,它连接大量设备并允许它们相互通信 Internet 上的网站托管在称为服务器的设备上,当您与 Intern ...

  3. react组件之非受控组件和高阶组件

    非受控组件 受控组件和非受控组件的区别 ----- value import React, { Component } from 'react' export default class extend ...

  4. 全网最详细 二进制 k8s v1.25.x文档

    二进制安装k8s v1.25.0 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k8s)二进制高可用安装部署,支持IPv4+IPv6双栈 ...

  5. 从APNIC获取中国IP地址列表

    关于APNIC 全球IP地址块被IANA(Internet Assigned Numbers Authority)分配给全球三大地区性IP地址分配机构,它们分别是: ARIN (American Re ...

  6. [Java EE] java.net.SocketException: Connection reset【解决中】

    1 错误描述 6:44:33.112] [DEBUG] [http-nio-9527-exec-3] [HttpClientUtil] http post url:http://bdp-gateway ...

  7. 四月二十四号java基础知识

    1.输入输出是指程序与外部设备或其他计算机进行交互的操作2.流(stream)是指计算机各部件之间的数据流动流的内容上划分:流分为字节流和字符流3.输入流:将数据从外设或外存(如键盘.鼠标.文件等)传 ...

  8. 基于SqlSugar的开发框架循序渐进介绍(26)-- 实现本地上传、FTP上传、阿里云OSS上传三者合一处理

    在前面介绍的随笔<基于SqlSugar的开发框架循序渐进介绍(7)-- 在文件上传模块中采用选项模式[Options]处理常规上传和FTP文件上传>中介绍过在文件上传处理的过程中,整合了本 ...

  9. SPI-SPI主机硬件片选功能使用说明

    SPI主机硬件片选功能使用说明 SPI协议最早的标准,是由摩托罗拉公司制定.在协议使用的过程中,根据实际需求可能会进行一些扩展和修改. 在一份由飞思卡尔半导体发布的SPI V4.01版本规范中,对片选 ...

  10. mongodb使用自带命令工具导出导入数据

    记录 mongo 数据库用原生自带的命令工具使用 json 文件方式进行导入.导出的操作! 在一次数据更新中,同事把老数据进行了清空操作,但是新的逻辑数据由于某种原因(好像是她的电脑中病毒了),一直无 ...