cookie与session简介及操作

cookie

保存在客户端浏览器上的键值对

虽然cookie是保存在客户端浏览器上的键值对 但是是服务端设置的 浏览器有权禁止cookie的写入

django中操作cookie

# 小白必回三板斧
obj = HttpResponse()
return obj # 效果都是一样的
# 设置cookie
obj.set_cookie('key','value') # 告诉浏览器设置
# 获取cookie
request.COOKIES.get('key') # 获取浏览器携带过来的cookies
# cookie的骚操作
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('username')
        if username == 'long' and password == '123':
            # 登陆成功 设置cookie
            obj = redirect('/home/')
            obj.set_cookie('k1','long')
            return obj
    return render(request, 'test.html', locals())

# 校验用户是否登录
def home(requset):
    if request.COOKIES.get('k1'):
        return HttpResponse('登录成功')
    return redirect('/login/')

cookie超时时间

# 如何设置cookie超时时间
obj.set_cookie('k1','v1', max_age=5) # 秒为单位
obj.set_cookie('k1','v1', expires=5) # 秒为单位
# 都是设置超时时间 并且都是秒为单位 区别: 给ie浏览器设置cookies设置超时时间 只能用 expires参数.

# 装饰器
from functools import wraps
def login_auth(func):
    @wraps(func)
    def inner(request,*args, **kwargs):
        # 判断当前用户是否登录
        if request.COOKIES.get('k1'):
            res = func(request, *args, **kwargs)
            return res
        else:
            current_url = request.path_info
            return redirect('/login/?next=%s'%current_url)
    return inner

request.path_info 只拿url

reque*st.get_full_path() 拿url 加get请求的部分

删除cookie

.....
obj = redirect('/login/')
obj.delete_cookie('k1')
return obj

session

保存在服务端上面的键值对
session的工作机制是需要依赖于cookie的

session操作

# 设置session
request.session['k1'] = 'v1'
# 获取session
request.session.get('k1')
# 拿到随机字符串
request.session.session_key()
# 存在则不设置
request.session.setdefault('k1',123)
# 检查会话session的key在数据库中是否存在
request.session.exists("session_key")
# 删除
request.session.delete()
request.session.flush() # 只删客户端
    这用于确保前面的会话数据不可以再次被用户的浏览器访问
    例如,django.contrib.auth.logout() 函数中就会调用它。
# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

会自动将数据存在django_session表中 默认过期时间是 14

为了数据的安全 数据库中不会明文暴露用户信息 所以是密文

设置 key value发生了什么?

1.django内部自动帮你调用算法生成一个随机字符串

  1. 在django session添加数据 (数据也是加密的) >>> 随机字符串 加密后的数据 失效时间

  2. 将生产的随机字符串放回给客户端浏览器, keysessionid value随机字符串 sessionid:随机字符串

get(session)发生了什么?

​ 1.django内部会自动去请求头里面获取cookie

2. 拿着`sessionid`对应的随机字符串去`django_session`表中一一比对
3. 如果对比上了 会将随机字符串对应的数据取出来 自动反入` request.session`中供你调用 如果没有就是一个空字典

django session 在创建数据的时候 是针对浏览器的 所以只会保存一条

token

在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思。一般作为邀请、登录系统使用。

django中间件

django请求生命周期

中间件

​ 类似于django的保安 一共有 7 个中间件

​ 并且支持用户自定义中间件 让后暴露给用户五个可以自定义的方法 随意创建一个py文件 填代码即可 写完后需要 注册 (****)

​ 只要你想做一些网站的全局性功能 你都应该考虑使用django的中间件 比如: 全局的用户登录校验, 全局的用户访问频率校验, 全局的用户权限校验

​ 需要掌握:

process_request 请求来的时候触发 参数 request

class SecurityMiddleware(MiddlewareMixin): # 他们都继承了 middleware
    pass
from django.utils.deprecation import MiddlewareMixin # 模块的导入
# 写自己的类继承 Middleware
class MyMdd1(MiddlewareMixin):
    def process_request(self, request):
        print('xxx')
        return HttpResponse('我是xxx的response') # 该方法一旦返回了httpresponse对象 那么请求会立刻停止往后走原路立刻返回

process_response 响应走的时候触发 参数 request response 且必须要返回response 他就是后端返回给前端的数据~

class MyMdd1(MiddlewareMixin):

    def process_response(self, request, response):
        print('test')
        return response  # 必须放回response 不返回直接报错!

# 请求来的时候是从上往下
# 响应走的时候是从下往上

​ 需要了解:

process_views 参数: request view_name *args **kwargs 路由匹配成功之后 执行视图函数之前

def process_views(self, request, view_name, *args, **kwargs):
    return HttpResponse('xx') # 如果返回 HttpResponse 会从头执行process_response

process_template_response 参数: request response 当你返回的对象中含有render属性的时候会自动触发

def process_template_response(self, request, response) # 如果形参中有response 就必须返回response
    print('xxx')
    return response 

# 需要触发需要写个函数
def index(requset):
    def render():
        reutrn HttpResponse('xxx')
    obj = HttpResponse('xxxx')
    obj.render = render
    return obj

process_exception 参数 : request exception 当视图函数有异常时会自动触发 顺序是 从下往上

def process_exception(self, requset, exception):
    print(exception)

django----cookie与session 和 中间件的更多相关文章

  1. Django --- cookie与session,中间件

    目录 1.cookie与session 1.cookie 2.session 2.中间件 1.中间件作用 2.用户可以自定义的五个方法 3.自定义中间件 1.cookie与session 1.cook ...

  2. day13 cookie与session和中间件

    day13 cookie与session和中间件 今日内容概要 cookie与session简介 django操作cookie与session django中间件简介 如何自定义中间件 csrf跨站请 ...

  3. Django之cookie与session、中间件

    目录 cookie与session 为什么会有cookie和session cookie 设置cookie 获取cookie 删除cookie 实例:cookie版登录校验 session 设置ses ...

  4. Django框架-cookie和session以及中间件

    目录 一.cookie 和 session 1.为什么会有这些技术 2. cookie 2.1 Django如何设置cookie 2.2 Django如何获取cookie 2.3 Django如何设置 ...

  5. Django - Cookie、Session、自定义分页和Django分页器

    2. 今日内容 https://www.cnblogs.com/liwenzhou/p/8343243.html 1. Cookie和Session 1. Cookie 服务端: 1. 生成字符串 2 ...

  6. Django cookie、session使用

    一.cookie Cookie是key-value结构,类似于一个python中的字典.随着服务器端的响应发送给客户端浏览器.然后客户端浏览器会把Cookie保存起来,当下一次再访问服务器时把Cook ...

  7. cookie、session和中间件

    目录 cookie和session cookie与session原理 cookie Google浏览器查看cookie Django操作cookie 获取cookie 设置cookie 删除cooki ...

  8. Python Web框架篇:Django cookie和session

    part 1 概念 在Django里面,cookie和session都记录了客户端的某种状态,用来跟踪用户访问网站的整个回话. 两者最大的区别是cookie的信息是存放在浏览器客户端的,而sessio ...

  9. python Django cookie和session

    在一个会话的多个请求中共享数据,这就是会话跟踪技术.例如在一个会话中的请求如下:  请求银行主页: 请求登录(请求参数是用户名和密码): 请求转账(请求参数与转账相关的数据): 请求信誉卡还款(请求参 ...

  10. falsk 与 django cookie和session存、取、删的区别

    falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...

随机推荐

  1. ZeroC ICE源代码中的那些事 - 嵌套类和局部类

    使用嵌套类(类中定义的类,c++没有静态类)或局部类(在函数或成员方法中定义的类),进行行为模式的委托(委托请求)或异步 . java中嵌套类和局部类隐式完成了你对外部对象(实例)访问的私有堆栈的初始 ...

  2. C# XML解析之DOM模型

    DOM的工作方式是:首先将XML文档一次性的装入内存,然后根据文档中定义的元素和属性在内存中创建一个“树型结构”也就是一个文档对象模型,这里的含义其实是把文档对象化,文档中每个节点对应着模型中一个对象 ...

  3. 使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink

    前言 本文由 Nebula Graph 实习生@王杰贡献. 最近 @Yener 开源了史上最大规模的中文知识图谱--OwnThink(链接:https://github.com/ownthink/Kn ...

  4. Aso.Net Core 的配置系统Configuration

    目录 Aso.Net Core 的配置系统Configuration 01.Json文件的弱类型方式读取 02.Json文件的强类型获取方式 Aso.Net Core 的配置系统Configurati ...

  5. Socket 实现简单的多线程服务器程序

    **********服务器端************* public class ServerSocket{ public static void main(String[] args) throws ...

  6. Java基础面试题及答案(三)

    多线程 35. 并行和并发有什么区别? 并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件. 在一台处理器 ...

  7. python函数-参数

    python函数-参数 实验室 # 演示形参是可变类型 def register(name, hobby, hobby_list=[]): hobby_list.append(hobby) print ...

  8. udp协议以及socketserver

    udb协议 udb协议也是一种协议,它和tcp相比既有缺点也有优点 udb协议所发送的数据可以理解为自带报头,所以他不会出现粘包的情况.但是udp数据只管发送而不管接收,也就是说udp会出现丢包的情况 ...

  9. C语言博客作业08

    C语言I博客作业08](https://www.cnblogs.com/490-85-00-58-/p/11863312.html) 问题 回答 这个作业属于那个课程 C语言程序设计II 这个作业要求 ...

  10. $("#loginname").tips和jQuery中 的ajax

    jquery tips 提示插件 jquery.tips.js v0.1beta: 使用方法 $("#loginname").tips({ //#loginname为jquery的 ...