• django session深入


    转至原文  https://www.cnblogs.com/zhaof/p/6281468.html

    基于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'       (引擎)

  • 相关阅读:
    ubuntu 下python安装及hello world
    mongodb数据库学习【安装及简单增删改查】
    samba服务器共享开发【windows下开发linux网站】
    系统架构一:snmp+mrtg服务器监控
    记.gitignore的一次惊心动魄
    第一章 引论 第二章 算法分析
    渗透测试实践指南(1)
    day7
    day5 io模型
    day4(带)
  • 原文地址:https://www.cnblogs.com/Liang-jc/p/9326817.html
Copyright © 2020-2023  润新知