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. Python地理分析库whitebox在Anaconda中的配置

      本文介绍在Anaconda环境下,安装Python中的一个高级地理空间数据分析库whitebox的方法.   首先,我们打开"Anaconda Prompt (Anaconda)&quo ...

  2. 最简单的for循环语句

    前言 在前面的文章中,壹哥给大家讲解了顺序结构.分支结构,接下来我们就来学习Java里的循环结构.Java里的循环结构,可以通过while.do-while.for.foreach等方式进行实现,今天 ...

  3. go语言之UDP通信

    服务端 package main import ( "fmt" "net" ) func main() { listen, err := net.ListenU ...

  4. MarkdownStudy01markdown用法

    一级标题 二级标题 三级标题 字体 Hello,Word! Hello,Word! Hello,Word! Hello,Word! 引用 好好学Java 分割线 图片 超链接 点击跳转 列表 A B ...

  5. 华为 A800-9000 服务器 离线安装MindX DL

    MindX DL(昇腾深度学习组件)是支持 Atlas 800 训练服务器.Atlas 800 推理服务器的深度学习组件参考设计,提供昇腾 AI 处理器资源管理和监控.昇腾 AI 处理器优化调度.分布 ...

  6. [ElasticSearch]常用URL路径

    https://127.0.0.1:9200/ http://127.0.0.1:9200/_all?pretty https://127.0.0.1:9200/_cluster/health?pre ...

  7. stm32报错

    1. declaration may not appear after executable statement in block 关于编译错误的小伙伴:error: #268: declaratio ...

  8. IIS 部署.NET CORE 项目 出现 HTTP 错误 500.19 - Internal Server Error

    当出现这个错误时是因为服务器上没有.NET CORE对应的SDK以及运行时文件,我的.NET CORE版本是2.2,下载的就是2.2对应的文件. 附上.NET CORE2.2版本的下载链接 下载 .N ...

  9. 数据泵:oracle数据泵导入导出部分用户

    问题描述:需要将140服务器中的tbomnew实例下的部分用户导入到118服务器下的tbompx实例中,本次导入导出的两个数据库均为19C 部分用户名:CORE,MSTDATA,BOMMGMT,CFG ...

  10. 一天吃透JVM面试八股文

    什么是JVM? JVM,全称Java Virtual Machine(Java虚拟机),是通过在实际的计算机上仿真模拟各种计算机功能来实现的.由一套字节码指令集.一组寄存器.一个栈.一个垃圾回收堆和一 ...