Django框架cookie和session方法及参数设置

目录
  • 1. cookie和session介绍
    • 1.1 cookie 简介
    • 1.2 cookie的缺陷
    • 1.3 session简介
    • 1.4 session与cookie的区别
  • 2. 设置cookie
    • 2.1 设置cookie
    • 2.2 获取cookie
    • 2.3 删除cookie
    • 2.4 设置过期时间和加盐
    • 2.5 cookie的其他参数
  • 3. 设置 session
    • 3.1 设置,修改,删除session
    • 3.2 session的其他方法
    • 3.3 session的其他配置(配置文件中)

1. cookie和session介绍

1.1 cookie 简介

cookie是指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。由网景公司的前雇员卢·蒙特利在1993年3月发明。

Cookie保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie

因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序(购物网站)的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一些东西。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么,所以Cookie就是用来绕开HTTP的无状态性的“额外手段”之一。服务器可以设置或读取Cookie中包含的信息,借此维护用户跟服务器会话中的状态。

cookie除了能记录之前历史的功能外还可以用于识别用户身份。

1.2 cookie的缺陷

  • Cookie会被附加在每个HTTP请求中,所以无形中增加了流量。
  • 由于HTTP请求中的Cookie是明文传递的,所以安全性成问题,除非使用超文本传输安全协定。
  • Cookie的大小限制在4 KB左右,对于复杂的存储需求来说是不够用的。

1.3 session简介

会话(session):会话是一种持久的网络协议,用于完成服务器和客户端之间的一些交互行为。会话是一个比连接粒度更大的概念,一次会话可能包含多次连接,每次连接都被认为是会话的一次操作。

在Web中,Session是指一个用户与网站服务器进行一系列交互的持续时间,通常指从注册进入系统到注销退出系统之间所经过的时间,以及在这段时间内进行的操作,还有,服务器端为保存用户状态开辟的存储空间。

1.4 session与cookie的区别

  • Cookie以文本文件格式存储在浏览器中,而session存储在服务端。
  • cookie的存储限制了数据量,只允许4KB,而session是无限制的。
  • cookie包含在每一个客户端请求报文中,因此容易被人捕获。
  • cookie和session都可以设置过期时间

2. 设置cookie

2.1 设置cookie

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
    <script src="/static/bootstrap-3.4.1-dist/js/jquery-3.6.0.min.js"></script>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css" rel="external nofollow"  rel="external nofollow" >
</head>
<body>
<p>
    <h1>Set Cookie OK</h1>
</p>
</body>
</html>

views.py代码

from django.shortcuts import render, HttpResponse
def set_cookie(request):
	"""
	先设置
	"""
    # cookie_obj = HttpResponse("set cookie OK")
    cookie_obj = render(request, "setCookie.html")
    """
    设置cookie
    """
    cookie_obj.set_cookie("Name", "Hello")
    cookie_obj.set_cookie("is_cookis", True)
    return cookie_obj

urls.py代码

from django.contrib import admin
from django.urls import path
from appName import  views

2.2 获取cookie

views.py

from django.shortcuts import render, HttpResponse
def get_cookie(request):
    cookie_obj = render(request, "getCookie.html")
    print(request.COOKIES.get("Name"))
    print(request.COOKIES.get("is_cookis"))
    return cookie_obj

#结果:
Hello
True
# request.COOKIES.get(Key) 获取cookie

2.3 删除cookie

views.py

from django.shortcuts import render, HttpResponse
def del_cookie(request):
   cookie_obj = HttpResponse("Delete cookie OK")
    # 把cookis "is_cookis" 删除
    cookie_obj.delete_cookie("is_cookis")
    return cookie_obj
# 执行结果:
Hello
None

测试流程:

1. 先访问 set_cookie设置cookie

2. 访问 get_cookie获取cookie:Name:Hello和"is_cookis", True

3. 访问 del_cookie 删除is_cookis

4. 最后再访问 get_cookie 获取cookie, 发现只有Name Hello,is_cookis的值为:None

2.4 设置过期时间和加盐

cookie的过期时间,如果不写,关闭浏览器,cookie就失效了

obj.set_cookie('key','value')

也可以设置过期时间:

obj.set_cookie('key','value',expires=10)
设置10s过期

对cookie进行加盐

obj.set_signed_cookie('nb','yes','123',expires=1000)

获取加盐的cookie

nb=request.get_signed_cookie('nb',salt='123')

2.5 cookie的其他参数

key, 键
value='', 值
max_age=None, 超时时间 cookie需要延续的时间(以秒为单位)如果参数是\ None`` ,这个cookie会延续到浏览器关闭为止
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/‘, Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问,浏览器只会把cookie回传给带有该路径的页面,这样可以避免将cookie传给站点中的其他的应用。
domain=None, Cookie生效的域名 你可用这个参数来构造一个跨站cookie。如, domain=”.example.com”所构造的cookie对下面这些站点都是可读的:www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。如果该参数设置为 None ,cookie只能由设置它的站点读取
secure=False, 浏览器将通过HTTPS来回传cookie
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

3. 设置 session

3.1 设置,修改,删除session

搭建一个简单的网站,必须要登录才可以访问。

HTML代码:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p>欢迎用户:{{ name }} 登录:</p>
<p>
    只有登录才能看到。
</p>
<form action="/delete/" method="post">
    <input type="submit" value="退出">
</form>
</body>
</html>

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
    <script src="/static/bootstrap-3.4.1-dist/js/jquery-3.6.0.min.js"></script>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css" rel="external nofollow"  rel="external nofollow" >
</head>
<body>

<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                UserName:<input type="text" name="Name">
                PassWord:<input type="password" name="PassWord">
                <input type="submit" value="提交">
            </form>
        </div>
    </div>
</div>
</body>
</html>

delete.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
<body>
<div>
    <p>请先<a href="/login/" rel="external nofollow" >登录</a></p>
</div>
</body>
</html>

后端代码:

views.py代码

from django.shortcuts import render, HttpResponse, redirect
def login(request):
    if request.method == "POST":
        name = request.POST.get("Name")
        password = request.POST.get("PassWord")
        print(name, password)
        # 模拟数据库校验密码
        if name == "Hans" and password == "123":
            request.session["name"] = name  # 设置session
            request.session['is_login'] = True
            return redirect("/index/")
    else:
        return render(request, "login.html")
def index(request):
    is_login = request.session.get("is_login")
    name = request.session.get("name")
    print("获取到name", name)
    # 更新session
    request.session['name'] = "HELLO"  # 更新session
    # 重新获取name
    name = request.session.get("name")
    if is_login:
        return render(request, "index.html", locals())
    else:
        return redirect("/login/")
def delete(request):
    name = request.session.get("name")
    if request.method == "POST":
        del request.session['is_login']  # 删除session
        del request.session['name']
        # request.session.flush()  # 清空cookie和session
        return HttpResponse("%s 已经退出" % name)
    return render(request, "delete.html")
#删除cookie
	del request.session['name'] # 删除某一个session
    request.session.delete() # 删除数据库里的session
    request.session.flush()  # cookie和数据库都删

路由urls.py

from django.contrib import admin
from django.urls import path
from appName import  views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    path('login/', views.login),
    path('delete/', views.delete),
]

3.2 session的其他方法

设置Session数据
	request.session.setdefault('k1',123) # 存在则不设置
# 所有 键、值、键值对
	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(数据库和cookie都删)
	request.session.flush()
    	这用于确保前面的会话数据不可以再次被用户的浏览器访问
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

3.3 session的其他配置(配置文件中)

1. 数据库Session
	SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)

2. 缓存Session
	SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
	SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

3. 文件Session
	SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
	SESSION_FILE_PATH = None                                    # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir() 

4. 缓存+数据库
	SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎

5. 加密Cookie Session
	SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎

其他公用设置项:
	SESSION_COOKIE_NAME = "sessionid"  # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
	SESSION_COOKIE_PATH = "/"          # Session的cookie保存的路径(默认)
	SESSION_COOKIE_DOMAIN = None        # Session的cookie保存的域名(默认)
	SESSION_COOKIE_SECURE = False       # 是否Https传输cookie(默认)
	SESSION_COOKIE_HTTPONLY = True      # 是否Session的cookie只支持http传输(默认)
	SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2    # Session的cookie失效日期(2周)(默认)
	SESSION_EXPIRE_AT_BROWSER_CLOSE = False   # 是否关闭浏览器使得Session过期(默认)
	SESSION_SAVE_EVERY_REQUEST = False   # 是否每次请求都保存Session,默认修改之后才保存(默认)

以上就是Django框架cookie和session简介及参数设置的详细内容,更多关于Django框架cookie和session的资料请关注我们其它相关文章!

(0)

相关推荐

  • Django组件之cookie与session的使用方法

    一.引子 http协议是无状态的,就是它不会记录请求和响应的任何信息,比如你访问一个服务器的一个网页时,先要你登录一下,然后进入网页,但当你要进入这个服务器的另一个网页时,它照常不会知道刚才你已经登录过了,又要让你登录一下,就是一个bug.但是,你说你每次上网的时候,只需要登录一下就行了,并没有我说的让你每次都登录,这是会话路径技术帮你记录了你的登录信息,现在我们们就来讲讲Django的会话路径技术cookie和session,实现会话追踪. 二.cookie cookie是key-value结

  • Django框架基础认证模块auth应用示例

    目录 1. auth介绍 2. autho常用操作 2.1 创建用户 2.2 验证用户 2.3 验证用户是否登录 2.4 已验证的用户想附加到当前会话 2.5 快捷增加登录校验装饰器 2.6 退出登录 2.7 检查密码 2.8 修改密码 2.9. 示例:利用auth模块搭建登录才能访问和有退出功能的页面 2.10 User对象的is_staff和is_active 3. 扩展默认的auth_user表 3.1 方案一: 一对一扩展 3.2 方案二: 继承AbstractUser类扩展 1. au

  • django框架cookie和session用法实例详解

    本文实例讲述了django框架cookie和session用法.分享给大家供大家参考,具体如下: 首先知道http协议 http协议它是无状态的协议,验证的信息不会保留 基于请求响应,短连接 cookie 指一段小信息,内部是一组组的键值对,保存在客户端 访问一个地址时,服务器生成一个cookie,由浏览器保留在本地,再次访问地址时就会携带这个cookie,一般用于用户信息的验证 cookie的设置: obj.set_cookie(key,value,...) 下面来看一个简单的例子 #设置co

  • django进阶之cookie和session的使用示例

    Cookies :是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它收到服务器回发送过来的cookies.它保存在浏览器下的某个文件夹下. Session:Django的Session机制会向请求的浏览器发送cookie字符串.同时也会保存到本地一份,用来验证浏览器登录是否为同一用户.它存在于服务器,Django默认会把session存入到数据库中. Session依赖于Cookie,如果浏览器不能保存cookies那么session就失效了.因为它需要浏览器的c

  • Django框架cookie和session方法及参数设置

    目录 1. cookie和session介绍 1.1 cookie 简介 1.2 cookie的缺陷 1.3 session简介 1.4 session与cookie的区别 2. 设置cookie 2.1 设置cookie 2.2 获取cookie 2.3 删除cookie 2.4 设置过期时间和加盐 2.5 cookie的其他参数 3. 设置 session 3.1 设置,修改,删除session 3.2 session的其他方法 3.3 session的其他配置(配置文件中) 1. cook

  • Python Web框架之Django框架cookie和session用法分析

    本文实例讲述了Python Web框架之Django框架cookie和session用法.分享给大家供大家参考,具体如下: part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而session是存放在服务器端的. 两者使用的方式都是request.COOKIES[XXX]和request.session[XXX],其中XXX是您想要取得的东西的key. Cooki

  • django框架model orM使用字典作为参数,保存数据的方法分析

    本文实例讲述了django框架model orM使用字典作为参数,保存数据的方法.分享给大家供大家参考,具体如下: 假设有一个字典,里面已经有了所有相关信息,现在想利用这个字典作为参数,跟django model  结合,用很少的代码量保存数据,有什么简便方法,比如有如下定义的model: from django.db import models class MyModel(models.Model): title=models.CharField(max_length=250) body= m

  • Django框架模板的使用方法示例

    本文实例讲述了Django框架模板的使用方法.分享给大家供大家参考,具体如下: 创建模板文件夹 在项目下床架一个模板文件夹 在templates下面为了区分是哪一个应用的模板再建一个与应用同名的文件夹. 在setting.py的TEMLATES里配置模板文件的路径 在视图函数里return reder def index(request):#视图函数必须有一个参数 #进行处理,和M和T进行交互... # return HttpResponse('good') # #使用模板文件 # #1.加载模

  • Django框架用户注销功能实现方法分析

    本文实例讲述了Django框架用户注销功能实现方法.分享给大家供大家参考,具体如下: HttpResponse()里有个delete_cookie()方法专门用来删除cookie 我们到此来完整的实现一下:访问首页如果没有登录,就跳转到登录页面,登录成功之后再跳转回来的过程. 3个方法,index.login.logout # coding:utf-8 from django.shortcuts import render,render_to_response # Create your vie

  • django框架模板语言使用方法详解

    本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页面中的模板语言. 静态内容:css,js,html. 动态内容:通过模板语言,动态生成一些网页内容 模板使用: 在视图函数中,使用模板产生html内容返回给客户端 方式一: 加载模板文件(loader.get_template) 模板渲染,产生标准的html页面内容(render) 通过HttpRe

  • Django框架创建项目的方法入门教程

    本文实例讲述了Django框架创建项目的方法.分享给大家供大家参考,具体如下: Django 管理工具 安装 Django 之后,就有了可用的管理工具 django-admin.py.我们可以使用 django-admin.py 来创建一个项目: 我们可以来看下django-admin.py的命令介绍: Type 'django-admin.py help <subcommand>' for help on a specific subcommand. Available subcommand

  • Django中Cookie搭配Session使用实践

    目录 Cookie的作用 Cookie登录的实现过程 Cookie的安全隐患 Session的引进 Session的启用 Session的使用 Session搭配Cookie使用 Cookie的作用 前面我们说道Django实战006:Cookie设置及跨域问题处理,Cookie可以在浏览器端保存用户数据,当用户访问服务器时会提交Cookie给服务器,Cookie附加了当前状态, 服务器可以通过Cookie来标识用户的登录状态,起到简单的用户身份识别和用户信息记录等作用. Cookie登录的实现

  • Django框架使用内置方法实现登录功能详解

    本文实例讲述了Django框架使用内置方法实现登录功能.分享给大家供大家参考,具体如下: 一 内置登录退出思维导图 二 Django内置登录方法 1 位置 2 源码 @deprecate_current_app @sensitive_post_parameters() @csrf_protect @never_cache # 视图函数要渲染的模板位置(registration/login.html) def login(request, template_name='registration/l

随机推荐