[Python]Django会话保持(cookie & session)(一)

简介: [Python]Django会话保持(cookie & session)

bff4dee8f6a04ba2bf49a8781991dde6.jpg

前言

系列文章目录

[Python]目录

视频及资料和课件

链接:https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234

提取码:1234

1. 状态保持

浏览器请求服务器是无状态的。

无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。

无状态原因:浏览器与服务器是使用Socket套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的Socket连接,而且服务器也会在处理页面完毕之后销毁页面对象。

有时需要保持下来用户浏览的状态,比如用户是否登录过,浏览过哪些商品等

实现状态保持主要有两种方式:

  1. 在客户端存储信息使用Cookie
  • 每次浏览器向服务器发送请求,都携带cookie,则每次请求服务器都能知道本次发送请求的客户端之前做过什么,即可以根据之前的信息(cookie)进行后续的处理,以此实现会话的保持(状态保持)
  1. 在服务器端存储信息使用Session

2. Cookie

2.1 Cookie简介

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。

Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。

服务器可以利用Cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。Cookies最典型记住用户名。

Cookie是存储在浏览器中的一段纯文本信息,建议不要存储敏感信息如密码,因为电脑上的浏览器可能被其它人使用。

2.2 Cookie的流程

  • 第一次请求过程
  1. 我们的浏觉器第一次请求服务器的时候,不会携带任何cookie信息
  2. 服务器接收到请求之后,发现请求中没有任何cookie信息
  3. 服务器设置一个cookie.这个cookie设置在响应中
  4. 我们的浏览器接收到这个响应之后,发现响应中有cookie信息,浏览器会将cookie信息保存起来
  • 第二次及其之后的过程
  1. 当我们的浏览器第二次及其之后的请求都会携带cookie信息
  2. 我们的服务器接收到请求之后,会发现请求中携带的cookie信息,这样的话就认识是谁的请求了

2.3 Cookie的特点

  • Cookie以键值对的格式进行信息的存储。
  • Cookie保存在客户端,不同浏览器的Cookie不会进行互通。
  • Cookie通过请求头传递给服务器,返回的Cookie在响应头中。
  • Cookie基于域名安全,不同域名的Cookie是不能互相访问的,如访问itcast.cn时向浏览器中写了Cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的Cookie信息。
  • 当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有Cookie信息提交给网站服务器。

2.4 设置Cookie

可以通过HttpResponse对象中的set_cookie()方法来设置cookie。

语法:

HttpResponse.set_cookie(cookie名, value=cookie值, max_age=cookie有效期)
  • max_age单位为秒,默认为None 。如果是临时cookie,可将max_age设置为None。临时Cookie被删除的时间为浏览器关闭时。Cookie的有效时间 = 浏览器得到响应的时间 + Cookie有效期。

项目/urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', include(('login.urls', 'login'), namespace='login')),
    path('book/', include(('book.urls', 'book'), namespace='book'))
]

login/urls.py:

from django.urls import path
from login import views
urlpatterns = [
    path('', views.login),
    path('set_cookie', views.set_cookie)
]

login/views.py:

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import redirect
from django.urls import reverse
# Create your views here.
def set_cookie(request):
    response = HttpResponse('set_cookie')
    # 在响应中设置Cookie为 username=zs
    response.set_cookie('username', value='zs')
    # 返回响应
    return response

2.5 读取Cookie

可以通过HttpResponse对象的COOKIES属性来读取本次请求携带的cookie值。

request.COOKIES为字典类型。

login/urls.py:

from django.urls import path
from login import views
urlpatterns = [
    path('', views.login),
    path('set_cookie/', views.set_cookie),
    path('get_cookie/', views.get_cookie)
]

login/views.py:

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import redirect
from django.urls import reverse
import json
# Create your views here.
def set_cookie(request):
    response = HttpResponse('set_cookie')
    # 在响应中设置Cookie为 username=zs
    response.set_cookie('username', value='zs')
    # 返回响应
    return response
def get_cookie(request):
    # 获取浏览器请求时携带的cookie
    cookies = request.COOKIES
    print('cookies: ', cookies)
    print('cookies_type: ', type(cookies))
    # 获取cookie中的用户名
    # 由于cookies是字典类型,所以可以使用字典方式获取cookie中某一个值
    username = cookies['username']
    print('username: ', username)
    # 将cookie以JSON字符串的形式返回给浏览器
    return JsonResponse(cookies)





相关文章
|
7天前
|
Linux 数据库管理 Python
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)
66 4
|
3天前
|
存储 编解码 应用服务中间件
会话跟踪技术(Session 以及Cookie)
会话跟踪技术(Session 以及Cookie)
|
4天前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
1天前
|
小程序 前端开发 JavaScript
计算机Python项目|django傣族节日及民间故事推广小程序
计算机Python项目|django傣族节日及民间故事推广小程序
|
2天前
|
前端开发 JavaScript 数据安全/隐私保护
计算机Python项目|django学生成绩管理系统
计算机Python项目|django学生成绩管理系统
|
9天前
|
中间件 数据库 Python
Django——会话.Cookie&Session
Django——会话.Cookie&Session
|
1月前
|
存储 自然语言处理 API
Session、cookie、token有什么区别?
Session、cookie、token有什么区别?
29 1
|
10天前
|
存储 前端开发 小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序
|
16天前
|
存储 Web App开发 安全
Cookie和session 及Web相关工具
Cookie和session 及Web相关工具
|
10天前
|
JSON 前端开发 Java
Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式
Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式