当前位置: 首页 > news >正文

django入门教程之cookie和session【六】

cookie

服务器在响应头中设置cookie,发给客户端,浏览器拿到响应头后会自动保存下来这个cookie,并在同一个域名后续的请求中将cookie作为请求头传给服务端。

新建一个app: 

python manage.py startapp mycookie

代码编写

 mycookie/views.py文件:

#coding=utf8

from django.http import HttpResponse

from django.shortcuts import render

# Create your views here.


def set_cookie(request):
    response = HttpResponse('这是设置cookie')
    response.set_cookie("name", "lili", max_age=50)
    return response


def get_cookie(request):
    print(request.COOKIES)
    print(request.COOKIES.get("name"))
    return HttpResponse('这是读取cookie')


def del_cookie(request):
    response = HttpResponse('这是删除cookie')
    response.set_cookie("name", "lili", max_age=0)
    return response

 mycookie/urls.py文件:

from django.urls import path
from . import views

# app_name = 'cookie'

urlpatterns = [
    path('set/', views.set_cookie),
    path('get/', views.get_cookie),
    path('del/', views.del_cookie)
]

 根项目/urls.py文件

from django.contrib import admin
from django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('cookie/', include('mycookie.urls'))
]
浏览器访问

浏览器中访问:http://127.0.0.1:1992/cookie/get/

这时没有任何cookie。

 再访问:http://127.0.0.1:1992/cookie/set/

响应头中有返回set_cookie字段。 此时Application中也有了cookies值。

设置的max_age是50s,50s后cookie过期,如果访问http://127.0.0.1:1992/cookie/del/ 会立刻过期。过期后,再次访问网页,cookie字段就为空。

同一个域名下,访问其它路由地址,可以发现在cookie有效期内,请求头中会带有我们设置的cookie。

session 

代码编写

settings.py文件中,增加2个属性值。

# session存储引擎,默认是db,默认设置查询在本机python默认路径的global_settings.py文件:C:\Users\用户\AppData\Local\Programs\Python\Python311\Lib\site-packages\django\conf\global_settings.py
SESSION_ENGINE = "django.contrib.sessions.backends.file"
# 设置session文件存储目录,必须是已存在的目录
SESSION_FILE_PATH = BASE_DIR / "session_path"

以下代码中我们并未设置session的过期时间,django在global_settings.py中有默认的过期时间,14天。 还有默认存储引擎,只是这次举例改为file引擎。

代码如下: 

# views.py文件代码

def set_session(request):
    request.session['id'] = 10
    request.session['meta'] = 'V'
    return HttpResponse('这是设置session')


def get_session(request):
    print(request.session)  # <django.contrib.sessions.backends.file.SessionStore object at 0x000001DF88B1E610>
    print(request.session.get("id"))  # 10
    print(request.session.items())  # dict_items([('id', 10), ('meta', 'V')])
    print(request.session.get_session_cookie_age())   # 1209600s == 14天
    return HttpResponse('这是读取session')


def del_session(request):
    # 注意重复删除会报错
    # print(request.session.pop('id'))
    # print(request.session.items())
    request.session.clear()
    print(request.session.items())  # dict_items([])
    return HttpResponse('这是删除session')



# urls.py文件代码
from django.urls import path
from . import views

urlpatterns = [
    path('set/', views.set_cookie),
    path('get/', views.get_cookie),
    path('del/', views.del_cookie),
    path('set_s/', views.set_session),
    path('get_s/', views.get_session),
    path('del_s/', views.del_session)
]
浏览器访问

1、访问set_s时,响应头中返回了set-cookie,同时设置的session_path目录下生成了sessionid文件。

 2、访问get_s时,会发现请求头的cookie字段加上了sessionid。

3、访问del_s时,会将request.session里的字段清空,注意这里只是清空字段值,并不是删除session。不论是cookie还是session,一旦返回给浏览器,就由浏览器控制是否删除,要么到过期时间自动删除,要么通过浏览器设置中的清空浏览记录来删除。

相关文章:

  • Spring AI Alibaba AudioModel使用
  • Linux的进程信号 -- 信号产生,信号保存,信号捕捉,硬件中断,内核态和用户态,可重入函数,volatile,SIGCHLD
  • 反序列化漏洞
  • STM32实现智能温控系统(暖手宝):PID 算法 + DS18B20+OLED 显示,[学习 PID 优质项目]
  • 卷积神经网络 - AlexNet各层详解
  • 蓝桥杯第十届 数列求值
  • c++进阶--哈希表的实现
  • element-plus中el-empty空盒子组件和Collapse 折叠面板组件的使用
  • 第十七章:Future Directions_《C++ Templates》notes
  • java 线程创建Executors 和 ThreadPoolExecutor 和 CompletableFuture 三者 区别
  • 数据库查询练习
  • ASP.NET Web API + VUE3 整合阿里云OSS,后端API生成预签名上传Url,前端VUE进行上传
  • 蓝桥杯第 十一天 国赛 2020 第 2题 扩散
  • CVE-2021-45232未授权接口练习笔记
  • conda环境下解决gitk乱码模糊
  • Postman使用02、断点、fiddler弱网测试
  • Java 基于微信小程序的开放实验室预约管理系统
  • 从单机到集群:Elasticsearch集群搭建指南
  • HTML5 初探:新特性与本地存储的魔法
  • IP-guard与Ping32哪个加密更强?两款加密软件的安全架构解析
  • 元氏网站建设/网络营销服务商
  • dede s网站地图调文章/seo外链网
  • wordpress网站模板下载/百度百度一下就知道
  • 简单网站首页/什么平台可以免费发广告
  • 资讯网站的优势/安卓优化大师下载
  • 都江堰网站建设/环球网最新消息疫情