• cookie和session 以及Django中应用


    cookie和session机制

    cookie和session机制

      cookie机制采用的是在客户端保持状态的方案。作用就是为了解决HTTP协议无状态的缺陷所做的努力。

      session机制采用的是一种在客户端与服务器之间保持状态的解决方案。由于采用服务器端保持状态的方案在客户端也需要保持一个标识,

          所以session机制可能需要借助于cookie机制来达到保存标识的目的。session还提供了方便管理全局变量的方式。

          session 是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分哪个用户的session

    cookie和session内容

      cookie内容主要包括:key, value, 过期时间,路径和域。路径和域一起构成了cookie的作用范围。

      cookie的使用是由浏览器按照一定的规则在后台自动发送给服务器的,浏览器检查所有储存的cookie,

      如果某个cookie的作用范围大于等于将要请求的资源所在位置,将cookie附在请求资源的HTTP请求头上发给服务器。

      cookie的生命周期跟过期时间相关,如果不设置过期时间,成为回话cookie,保存在内存中,关闭浏览器窗口,cookie消失。

      如果设置过期时间,浏览器会把cookie写入硬盘,这些cookie仍然有效,直到超过设定的过期时间。

      存在硬盘上的cookie可以在同一个浏览器不同进程间共享,比如两个Chrome窗口。存在内存的,不同浏览器不同的处理方式。

      session内容,服务器使用类似python字典的 key value的形式存储的,存储session方式很多,数据库,缓存,文件,加密cookie,数据库加缓存。

     Django中的cookie

      cookie中的一些参数:

        --  max_age=1,  cookie生效的时间,单位是秒。

        --  expires  具体的过期时间

        --  path= “/”  作用路径 写/代表所有的url都可以访问到cookie 可以指定url

        -- domain= None  None代表当前域名  指定哪个域名以及它下面的二级域名(子域名)可以访问这个cookie

        -- secure = False  Https安全相关

        -- httponly=False  限制只能通过http传输 JS无法再传输中获取和修改

      设置cookie以及获取cookie

    # 设置cookie
        # 普通设置方式
        response_obj.set_cookie("key", "value",expires="time",path="/")
        
        # 加盐  
        #  加盐需要在服务端进行解盐才能查看
        response_obj.set_signed_cookie("k","v",salt="gaoxin")
    # 获取cookie
    # 普通
        cookies = request.COOKIES.get("key")
    # 加盐
        cookies = request.get_signed_cookie("k", salt="gaoxin")
     
    
    

      cookie + session 的工作原理

        -- 1 当用户来访问服务器时,服务端生成一个随机字符串。

        -- 2 当用户登录成功后,把 {sessionID:随机字符串} 加到cookie里发送给浏览器用户。

        -- 3 服务器以发送给客户端cookie中的随机字符串为键,用户信息做值,保存用户信息

    Django中的session

      django中session中一些方法:

         注意 :request.session['name'] = 'gaoxin'  默认隐含了通过sessionID找到用户信息那一步,删除也是如此。

    # 获取,设置,删除session中数据
        # 获取
        request.session['key']
        request.session.get('key', None) # 不报错 设置一个默认值
        # 设置
        request.session['key'] = "value"
        request.session.setdefault('key', "value")# 存在则不设置
       # 删除
        del request.session['key']
    
    # 获取所有的键,值,键值对
        request.session.keys()
        request.session.values()
        request.session.items()
        request.session.iterkeys()
        request.session.itervalues()
        request.session.iteritems()
    
    # 用户session的随机字符串
        request.session.session_key
    
    # 清除数据库过期的session
        request.session.clear_expired()
    # 检查用户session的随机字符串是否在数据库中
        request.session.exists("session_key")
    # 清除当前用户的所有session数据
        request.session.delete("session_key")
    # 设置session的过期时间
        request.session.set_expiry(value)
    # 如果value是个整数 session会在这些秒后失效
    # 如果是个datetime类型的 就会在这个时间后失效
    # 如果value是0,用户关闭浏览器session就会失效
    # 如果value是None,session就会依赖全局session失效策略
     

      session的配置文件

    # 引擎 (存储位置)
    SESSION_ENGINE = "django.contrib.session.backends.file"
    SESSION_ENGINE = "django.contrib.session.backends.cached_db"
    # 缓存文件路径
    SESSION_FILE_PATH = "文件路径"
    
    # cookie保存在浏览器上的key  即 sessionID = 随机字符串
    SESSION_COOKIE_NAME = "gaoxin"
    
    # cookie 保存的路径
    SESSION_COOKIE_PATH = '/'
    
    # cookie保存的域名
    SESSION_COOKIE_DOMAIN = None
    
    # 是否https传输cookie
    SESSION_COOKIE_SECURE = False
    
    # 是否只支持http传输
    SESSION_COOKIE_HTTPONLY = True
    
    # cookie失效日期为600000秒 默认1209600秒
    SESSION_COOKIE_AGE = 600000
    
    # 是否关闭浏览器使session过期
    SESSION_EXPIRE_BROWSER_CLOSE = False
    
    # 如果设置成True 会在每次请求服务器的时候会以新的请求时间向后延期过期时间
    # 淘宝一直逛就不会登出 不刷新页面过段时间就自动登出
    SESSION_SAVE_EVERY_REQUEST = True
     
  • 相关阅读:
    WPF中实现Button.Content变化的简易动画
    WPF中ListBox的项ListBoxItem被选中的时候Background变化
    GD库处理图像
    PHP上传文件示例
    会话控制:Cookie和session
    PHP表单与验证
    PHP日期与时间
    PHP正则表达式
    PHP字符串处理
    目录与文件操作
  • 原文地址:https://www.cnblogs.com/wzbk/p/9355525.html
Copyright © 2020-2023  润新知