zoukankan      html  css  js  c++  java
  • Django中session的基础了解

    基于cookie做用户验证时:敏感信息不适合放在cookie中

    session依赖cookie

    session原理

    cookie是保存在用户浏览器端的键值对

    session是保存在服务器端的键值对

    session服务端中存在的数据为:

    session = {
    
       随机字符串1:{
    
       用户1的相关信息
    
      }
    
       随机字符串2:{
    
       用户2的相关信息
    
    }
    
    }

    session客户端即客户端的浏览器的cookie中存的数据是当前用户对应的随机字符串

    session的工作过程

    1、    生成随机字符串

    2、    写到用户浏览器的cookie中

    3、    保存到session中

    4、    在随机字符串对应的字典中设置相关内容

    而上述过程在Django中的体现为:

    request.session["username"]=user

    这里的username为通过request.POST.get("username")从前端html页面中获取到的用户名信息

    注意:

    在Django中要用session中一定要先执行:

    python manage.py makemigrations

    python manage.py migrate

    当用户登录的时候的就会在数据库的django_session表中记录session信息

    同样的通过request.session["username"]也可以获取相应的值

    在这个过程中:

    1、    首先获取当前用户的随机字符串

    2、    根据随机字符串获取对应的内容

    session的操作

    request.session["k1"]  如果不存在则会报错

    request.session.get["k1"],如果不存在则会报错,为了防止出错可以request.session.get('k1',none)

    request.session['k1'] = 123 设置session值

    request.session.setdefault('k1',123)  存在则不设置

    del request.session['k1']  删除

    request.session.clear()    删除

    所有 键、值、键值对

    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")

    request.session.set_expiry(value)

    默认的过期时间是两周,如果自己设置了过期时间,这样自己设定的优先级就会高于默认的

    如果value是个整数,session会在些秒数后失效。

    如果value是个datatime或timedelta,session就会在这个时间后失效。

    如果value是0,用户关闭浏览器session就会失效。

    如果value是None,session会依赖全局session失效策略。

    配置setting.py

    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的存储方式

    Django中支持session,其中内部提供了5种类型的session供开发者使用:

    数据库(默认)

    缓存

    文件

    缓存+数据库

    加密cookie

    1、如果是数据库,需要在settings.py中配置如下:

    SESSION_ENGINE = 'django.contrib.sessions.backends.db' (引擎(默认))

    2、如果是缓存session,需要在settings.py中配置如下:

    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'(引擎)

    SESSION_CACHE_ALIAS= 'default'  使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置

    1、    如果是文件session, 需要在settings.py中配置如下:

    SESSION_ENGINE = 'django.contrib.sessions.backends.file' (引擎)

    SESSION_FILE_PATH=None  缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()   

    2、    如果是缓存+数据库session,需要在settings.py中配置如下:

    SESSION_ENGINE='django.contrib.sessions.backends.cached_db'       (引擎)

    ##摘抄,侵删

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/qkqBeer/p/9079066.html
Copyright © 2011-2022 走看看