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

 

 

 

posted @ 2018-07-23 16:47  wzqwer  阅读(158)  评论(0编辑  收藏  举报