zoukankan      html  css  js  c++  java
  • Django之cookie与session

    1.cookie与session的简述:

    为什么会有这些技术:

      1.目的:是为了保存客户端的用户状态

      2.原因:HTTP协议是无状态的

    2.cookie:

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

    (2)django如何操作cookie

       obj=HTTPResponse()

      1.利用对象你才可以操作cookie

    obj = HttpResponse
    return obj
    
    obj = render()
    return obj
    
    obj = redirect()
    return obj        

      2.如何设置cookie:

    obj.set_cookie('k1','v1')#告诉浏览器设置

      3.如何获取cookie:

    request.COOKIES.get('k1')#获取浏览器携带过来的cookie值
    request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
    #参数:default:默认值,salt:加锁盐,max_age:后台控制过期时间

      4.如何设置cookie的超时时间:

    obj = set_cookie('k1','v1',max_age=3)
    obj = set_cookie('k1','v1',expires = 3)
    #两个参数都是设置超时时间,并且都是以秒为单位
    #区别:如果你想给IE浏览器设置cookie的超时时间你只能用expires

      5.删除cookie:

    def logout(request):
        obj = redirect('/login/')
        obj.delete_cookie('whoami')
        return obj
    #删除cookie并跳转到login页面

    3.session

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

    session请求流程图:

    # 获取、设置、删除Session中数据
    request.session['k1']
    request.session.get('k1',None)
    request.session['k1'] = 123
    request.session.setdefault('k1',123) # 存在则不设置
    del request.session['k1']
    
    
    # 所有 键、值、键值对
    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。
    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相关

    (1).设置session

    request.session['k1']='v1'
    #第一次设置的时候可能会报错,这是你需要检查有没有执行数据库迁移命令
    #生成Django需要用到的一些默认表django_session
    #django默认的session失效时间是14天,也就是两周
    request.session['k1']='v1'
    #上面这一段代码执行后都发生了哪些事情
    #1.Django内部自动帮你调用算法生成一个随机的字符串
    #2.在django_session添加数据(数据也是加密处理)
    #3.将产生的随机字符串返回给客户端浏览器,让浏览器保存“sessionid:随机字符串”

    (2).获取session

    request.session.get('k1')
    #1.Django内部会自动去请求头里面获取cookie
    #2.拿着sessionid所对应的随机字符串去django_session表中一一比对
    #3.如果对比上了,会将随机字符串对应的数据获取出来,自动放入request.session中供程序员调用,如果没有就是一个空字典

    (3).删除session

    request.session.delete()
    #客户端和服务端全部删除,只会根据浏览器的不同删除对应的数据

    (4).如何设置失效时间

    设置会话session和cookie的超时时间

    request.session.set_expiry(value)
    #如果value是个整数,session会在秒数后失效
    #如果value是个datetime或者timedelta,session就会在这个时间后失效
    #如果value是0,用户关闭浏览器session就会失效
    #如果value是None,session会依赖全局session失效策略。

    (5).Django中的session配置:

    Django中默认之处session,内部提供了五中类型的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 = 1209600                             # Session的cookie失效日期(2周)(默认)
    SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
    SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)
    
    Django中Session相关设置
    数据库Session
  • 相关阅读:
    easyExcel入门
    UML-从需求到设计--迭代进化
    UML-操作契约总结
    102. Binary Tree Level Order Traversal
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    94. Binary Tree Inorder Traversal
    84. Largest Rectangle in Histogram
    92. Reverse Linked List II
  • 原文地址:https://www.cnblogs.com/mqhpy/p/11984874.html
Copyright © 2011-2022 走看看