[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)





相关文章
|
2月前
|
Web App开发 数据安全/隐私保护 Python
万能ck提取登录软件,京东贴吧淘宝拼多多cookie提取工具,python框架分享
这个框架使用了Selenium进行浏览器自动化操作,包含了京东和淘宝的登录示例。代码展示了如
|
2月前
|
存储 数据库 数据安全/隐私保护
抖音ck提取工具,快手小红书微博哔哩哔哩cookie提取登录软件,python框架
这个框架提供了完整的Cookie提取功能,支持抖音、快手、小红书、微博和哔哩哔哩平台。主要特点包括
|
3月前
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
117 1
|
5月前
|
前端开发 JavaScript 关系型数据库
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
166 6
|
10月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
609 45
|
9月前
|
存储 前端开发 Java
【SpringMVC】——Cookie和Session机制
获取URL中参数@PathVarible,上传文件@RequestPart,HttpServerlet(getCookies()方法,getAttribute方法,setAttribute方法,)HttpSession(getAttribute方法),@SessionAttribute
230 11
|
10月前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
215 4
|
10月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
10月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
342 2
|
Python 安全 JavaScript

热门文章

最新文章

推荐镜像

更多