• django学习之- session


    session和cookie关系:session依赖于cookie
    基于cookie做用户验证时,敏感信息不适合放在cookie中
    原理:
    cookie定义:保存在用户游览器端的键值对
    session定义:保存在服务器端的键值对
    session原理:客户端发起登录请求,服务器端通过验证后,生成随机字符串返回给客户端,并且服务器端将此字符串和客户端信息存储
    到本地数据库中,用于客户端下次登录验证。
    session 和 cookie 区别
    cookie只是保存在客户端游览器的内容为键值对的文件,session是存储在服务器端的,可以文件,缓存,数据库形式存在,随机字串和数据
    存储在服务器端,只将随机字符串返回给客户端
    以下为一个帐号登录实例:
    def login(request):
        if request.method == 'GET':
            return render(request,'login.html')
        elif request.method == 'POST':
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
            if user == 'root' and pwd == '123':
                # 设置session帐号登录名称及登录状态
                request.session['username'] = user
                request.session['is_login'] = True
                request.session.set_expiry(10)  # sesson超时时间10秒
                return redirect('/index/')
            else:
                return render(request,'login.html')
    
    def index(request):
        # 获取session值
        if request.session.get('is_login',None):
            return render(request,'index.html',{'username':request.session['username']})
    def logout(request):
        # 删除所有session,进行当前登录注销
        request.session.clear()
        return redirect('/login')
    View Code
    操作介绍:
    request.session['k1'] # 获取k1的值,不存在则报错
    request.session.get('k1',None) # 获取k1的值,不存在则返回None
    request.session['k1'] = 123 # 不存在则创建,存在则更新
    request.session.setdefault('k1',123) # 不存在则创建默认值,存在则不作操作
    del request.session['k1'] # 删除k1
    键,值,键值对操作
    request.session.keys() # 提取所有键
    request.session.values() # 提取所有值
    request.session.iterkeys() # 迭代键
    request.session.itervalues() # 迭代值
    request.session.iteritems() # 迭代键值
    request.session.session_key # 用来获取session字符串
    request.session.clear_expired() # 清除所有已超过自身设定超时时间的session
    request.session.exists('session_key') # 检查session字串在数据库中是否存在
    request.session.delete('session_key') # 删除当前用户的所有session数据
    request.session.clear() # 清除用户的所有session数据,用于注销
    request.session.set_expiry(value): 设置session超时时间,默认2周
    # 如果value是个整数,session会在value秒后失效,
    # 如果value是个datatime或timedelta,session会在这个时间后失效
    # 如果value是0,用户关闭游览器session会失效
    # 如果value是None,session会依赖全局session失效策略
    配置文件setting中设置默认操作:
    SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认),表示session默认存储在数据库中
    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,默认修改之后才保存(默认)
    主要:SESSION_SAVE_EVERY_REQUEST = True # 超时时间按照每次访问之后开启计算
    session存储位置如下:引擎配置
    1:数据库(默认)
    2:缓存配置:
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
    SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
    memcache写法:
    CACHES = {
    'default': { # 这里的default就是上面缓存配置的default
    'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
    'LOCATION': [
    '172.19.26.240:11211',
    '172.19.26.242:11211',
    ]
    }
    }
    3:文件配置:
    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' # 引擎,加密后放入cookie
  • 相关阅读:
    #333 Div2 Problem B Approximating a Constant Range(尺取法)
    苦逼的单身狗(玄乎的尺取大法)
    欧拉项目第四题之三位数之积数的最大回数
    欧拉项目第三题之最大质数因子
    关于尺取法的认识与简单例题
    codeforces 980B Marlin
    康托展开和逆康托展开
    Chrome控制台中Network的Preview与Response区别
    配置Express中间件
    Express中间件简介
  • 原文地址:https://www.cnblogs.com/zy6103/p/8013228.html
Copyright © 2020-2023  润新知