zoukankan      html  css  js  c++  java
  • Django学习-16-Session

    1.保存在服务器的键值对
              2.Session做验证时,还要依赖Cookie(重要)。当用户登录成功时,生成随机字符串,一份放到Session,一份放到Cookie。当用户再次登录,查询用户Cookie中的随机字符串,与我Session中的随机字符串比较,如果相同则登录成功
              3.随机字符串是Session中的key,每一个key中value对应用户数据
              4.django默认生成随机字符串,并且数据库中也会有相应的记录
              5.可以保存在文件中、服务器中、内存中、缓存中、数据库中
              6.Django的request默认封装了session,前端就可以获取到
     
              类似:
            Session{
                jagiugas个asgiu:{
                    'is_login':True,
                    'user':'..',
                    'password':'sadasd',
                    ....        
                }
                asgfiahy1515sog:{
                ....
                }
            }
            
              代码实例:
                    设置Session
                    request.session['username'] = xxxx
                    Django的request.session方法为我们实现了四件事情
                    ① 生成字符串
                    ②写到用户浏览器cookie中
                    ③保存一份到session中
                    ④在随机字符串对应的字典中设置相关的键值对
                    获取Session
                    username = request.session['username']
                    获取session中的值时也为我们做了四件事
                    ①首先获取cookie中的字符串
                    ②查询session中字符串
                    ③获取session对应的字典
                    ④获取字典相应的键值对
     
     
            默认我们使用的数据库Session有如下的操作
                  # 获取、设置、删除Session中数据
            request.session['k1']
            request.session.get('k1',None)   #推荐使用,不存在不报错
            request.session['k1'] = 123        
            request.session.setdefault('k1',123)    # 存在则不设置
            del request.session['k1']        #删除session键值对
     
            # 所有 键、值、键值对
            request.session.keys()
            request.session.values()
            request.session.items()                   #返回 k,v
            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数据,还要查询一下用户session_key当做参数传递
            request.session.delete("session_key")
     
            # 删除当前用户的所有Session数据
            request.session.clear()
     
            request.session.set_expiry(value)
                * Django的默认超时时间是两周。
                * 如果value是个整数,session会在些秒数后失效。
                * 如果value是个datatime或timedelta,session就会在这个时间后失效。
                * 如果value是0,用户关闭浏览器session就会失效。
                * 如果value是None,session会依赖全局session失效策略。
            
    定制Session默认属性,添加至settings.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,默认修改之后才保存(默认)
                            如果每次都保存Session,session过期时间为:最后一次请求开始记时,直到超时为止
     
            Django中使用数据库Session时,Session的优势是体现不出来的,修改Session存储之后,views不用做任何修改
           1.数据库
           SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
         2.缓存Session
         SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
         SESSION_CACHE_ALIAS = 'default'           # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
         缓存机器在settings中的配置
            CACHES = {
                'default':{
                    'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
                    'LOCATION':[
                        'IP1:port',
                        'IP2:port'
                    ]
                },
                  'a1':{
                    'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
                    'LOCATION':[
                        'IP1:port',
                        'IP2:port'
                    ]
                },
            }
     
            3.数据库文件Session
            SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
          SESSION_FILE_PATH = None           # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()                                                            
          # 如:/var/folders/d3/j9tj0gz93dg06bmwxmhh6_xm0000gn/T
          加入路径 SESSION_FILE_PATH = os.path.join(BASE_DIR,'cache')
     
          4.缓存+数据库Session      获取Session先去缓存中拿,如果没有就去数据库拿,再放一份到缓存
                SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎
     
          5.加密cookie Session        相当于把加密后的Session到客户端,安全性相对较低
              SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎
     
     
     
  • 相关阅读:
    基于Windows Azure 安装SharePoint 2013
    mysql 在线安装
    Django实战1权限管理功能实现10:用户管理
    Django实战1权限管理功能实现08:组织架构修改和删除
    Django实战1权限管理功能实现07:组织架构列表展示
    nginx 在线安装脚本
    sublime 快捷键
    Django实战1权限管理功能实现09:组织架构关联用户
    Kubernetes概述
    入园2年7个月的第一篇技术博客的水文
  • 原文地址:https://www.cnblogs.com/cq146637/p/7811546.html
Copyright © 2011-2022 走看看