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

cookie:

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

cookie只能保存ASCII字符串

使用:

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

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

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

Python对cookie操作:

  1. # 获取cookiePython
  2. request.COOKIES['key']
  3. # 设置cookie
  4. 必须使用response
  5. reponse.set_cookie(key,value
  6. # 删除cookie
  7. 必须使用response
  8. respnse.delete_cookie("key")

session:

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

请求过程:

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

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

  1. # 获取、设置、删除Session中数据
  2. request.session['k1']
  3. request.session.get('k1',None)
  4. request.session['k1'] = 123
  5. request.session.setdefault('k1',123) # 存在则不设置
  6. del request.session['k1']
  7. # 所有 键、值、键值对
  8. request.session.keys()
  9. request.session.values()
  10. request.session.items()
  11. request.session.iterkeys()
  12. request.session.itervalues()
  13. request.session.iteritems()
  14. # 会话session的key
  15. request.session.session_key
  16. # 将所有Session失效日期小于当前日期的数据删除
  17. request.session.clear_expired()
  18. # 检查会话session的key在数据库中是否存在
  19. request.session.exists("session_key")
  20. # 删除当前会话的所有Session数据
  21. request.session.delete()
  22.   
  23. # 删除当前的会话数据并删除会话的Cookie。
  24. request.session.flush()
  25. 这用于确保前面的会话数据不可以再次被用户的浏览器访问
  26. 例如,django.contrib.auth.logout() 函数中就会调用它。
  27. # 设置会话Session和Cookie的超时时间
  28. request.session.set_expiry(value)
  29. * 如果value是个整数,session会在些秒数后失效。
  30. * 如果value是个datatimetimedeltasession就会在这个时间后失效。
  31. * 如果value0,用户关闭浏览器session就会失效。
  32. * 如果valueNone,session会依赖全局session失效策略。
  1. def auth(func):
  2. ''' 装饰器,检查当前游览器cookies里logname是否存在已登录的帐号,如果存在,则继续执行下面的函数,返回计划进入的url'''
  3. def inner(request,*args,**kwargs):
  4. v = request.COOKIES.get('logname')
  5. if not v:
  6. return redirect('/')
  7. return func(request,*args,**kwargs)
  8. return inner
  9. def login(request):
  10. '''登录url '''
  11. if request.method == 'GET':
  12. return render(request,'login.html')
  13. def index(request):
  14. if request.method == 'GET':
  15. '''get模式,获取cookies的logname帐号名,如果为空则返回登录页面 '''
  16. u = request.COOKIES.get('logname')
  17. if not u:
  18. return redirect('/')
  19. if request.COOKIES['logname'] == 'admin':
  20. alluser = models.UserName.objects.exclude(uname='admin')
  21. else:
  22. # loguser = request.session['username']
  23. loguser = request.COOKIES['logname']
  24. alluser = models.UserName.objects.filter(uname=loguser)
  25. return render(request, 'index.html', {'u_list': alluser})
  26. if request.method == 'POST':
  27. '''帐号登录验证 '''
  28. logname = request.POST.get('logname',None)
  29. logpwd = request.POST.get('logpwd',None)
  30. if models.UserName.objects.filter(uname=logname):
  31. if models.UserName.objects.filter(uname=logname,upwd=logpwd):
  32. # 登录验证成功,重写cookie的登录帐号,延时10秒
  33. response = HttpResponse('ok')
  34. response.set_cookie('logname',logname,max_age=10)
  35. return response
  36. else:
  37. return HttpResponse('pwderr')
  38. else:
  39. return HttpResponse('nmerr')
  40. @auth # 装饰器,在访问url为account时候,验证帐号是否为登录状态
  41. def account(request):
  42. if request.method == 'GET':
  43. return render(request,'account.html')
  44. '

[](javascript:void(0)

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

[](javascript:void(0)

  1. from django import views
  2. from django.utils.decorators import method_decorator
  3. @method_decorator(auth,name='dispatch')
  4. class Order(views.View):
  5. def get(self,request):
  6. v = request.COOKIES.get('logname')
  7. return render(request,'index.html',{'current_user':v})
  8. def post(self,request):
  9. v = request.COOKIES.get('logname')
  10. 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. 使用 Agora SDK 开发 React Native 视频通话App

    在 React Native 的应用中,从头开始添加视频通话功能是很复杂的.要保证低延迟.负载平衡,还要注意管理用户事件状态,非常繁琐.除此之外,还必须保证跨平台的兼容性. 当然有个简单的方法可以做到 ...

  2. Windows系统下载最新版Windows10 iso映像

    在电脑PC端如何下载最新版的完整Windows10 iso映像?打开https://www.microsoft.com/zh-cn/software-download/windows10/页面,是不能 ...

  3. springsecurity-jwt整合

    2 springsecurity-jwt整合 欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章http://www.javaman.cn/sb2/jwt 2.1整合springse ...

  4. THFuse: An infrared and visible image fusion network using transformer and hybrid feature extractor 论文解读

    THFuse: An infrared and visible image fusion network using transformer and hybrid feature extractor ...

  5. 在云服务器上搭建个人版chatGPT及后端Spring Boot集成chat GPT

    总结/朱季谦 本文分成两部分,包括[国内服务器上搭建chat GPT]和[后端Spring Boot集成chat GPT]. 无论是在[国内服务器上搭建chat GPT]和[后端Spring Boot ...

  6. R语言网络数据爬取

    现在大家对爬虫的兴趣不断高涨,R和PYTHON是两个非常有力的爬虫工具.Python倾向于做大型爬虫,与R相比,语法相对复杂,因此Python爬虫的学习曲线会相对陡峭.对于那些时间宝贵,又想从网上获取 ...

  7. kubernetes核心实战(六)--- ConfigMap

    8.ConfigMap 抽取应用配置,并且可以自动更新 创建配置文件 [root@k8s-master-node1 ~/yaml/test]# vim configmap.yaml [root@k8s ...

  8. [PKM] 服务器

    1 概述与基础常识 1.1 服务器的定义 定义: 服务器,英文名Server,指能提供某种服务的网络设备. 提供的主要服务包括:数据的接收和传递.数据的存储和数据的处理. 通俗点儿,我们可以把服务器比 ...

  9. Android Studio 样式和主题背景

    样式和主题背景 转载自   Styles and Themes  |  Android Developers 借助 Android 中的样式和主题背景,您可以将应用设计的细节与界面的结构和行为分开,其 ...

  10. Vue闪烁的问题

    问题: 当我们打开Vue页面的时候,如果弱网环境,会出现一个闪烁的效果 原因: Vue还来不及处理的模板 解决: 使用 v-cloak 来解决Vue这个打开页面的闪烁的问题 原理: 利用 v-cloa ...