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'   # 引擎
 
 
 

Django学习-16-Session的更多相关文章

  1. django学习之- session

    session和cookie关系:session依赖于cookie基于cookie做用户验证时,敏感信息不适合放在cookie中原理:cookie定义:保存在用户游览器端的键值对session定义:保 ...

  2. django学习-16.返回给前端页面数据为json数据类型的3种方案

    目录结构 1.前言 2.JsonResponse类的源码简单分析 2.1.JsonResponse类的源码如下所示 2.2.JsonResponse类的构造函数里的每个入参的大概含义和作用 3.[方案 ...

  3. django 学习-16 Django会话Cookie

    1.django.admin.py  startproject   cs3 cd cs3 django.admin.py   startapp   blog 2.    vim urls.py url ...

  4. Django学习笔记(5)——cookie和session

    一,前言 1.1,什么是会话跟踪技术 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束.在一个会话的多个请求中共享数据,这就是会话跟踪技术. 例如在一 ...

  5. Django学习笔记之URL与视图cookie和session

    cookie和session cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...

  6. Django学习笔记之Cookie、Session和自定义分页

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  7. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

  8. Django学习之Cookie和Session

    一.Cookie 1.Cookie的由来 2.什么是Cookie 3.Cookie的原理 4.查看Cookie 二.Django中操作Cookie 1.获取Cookie 2.设置Cookie 3.删除 ...

  9. Django学习笔记(9)—— 开发用户注册与登录系统

    一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...

  10. Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API

    用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...

随机推荐

  1. 吴恩达深度学习笔记(deeplearning.ai)之卷积神经网络(一)

    Padding 在卷积操作中,过滤器(又称核)的大小通常为奇数,如3x3,5x5.这样的好处有两点: 在特征图(二维卷积)中就会存在一个中心像素点.有一个中心像素点会十分方便,便于指出过滤器的位置. ...

  2. Java设计模式——装饰模式

    转载自:http://blog.csdn.net/xu__cg/article/details/53024490 抽象构件 public interface CarInterface { void m ...

  3. js实现点击切换显示隐藏,点击其它位置再隐藏

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 初涉扫码登录:edusoho实现客户端扫码登录(简版)

    一.项目简介及需求 edusoho是一套商业版的在线教育平台,项目本身基于symfony2框架开发,现在有一款自己的APP,要求在不多修改edusoho自身代码的基础上,实现客户端对PC端扫码登录.不 ...

  5. 【Tools】ubuntu16.04升级Python2.7到3.5

    最近开始学Python,但我发现我ubuntu16.04上默认的Python是2.7,并不是3,x 于是准备Python升级,记录安装过程给初学者参考一下. 1.先取得管理员权限, 个人习惯先取得管理 ...

  6. github page博客里添加多说评论插件

    本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 由于现在我这个博客原来用的是DISQUS评论插件,那全是全球 ...

  7. 一致性哈希(附带C++实现)

    在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布式集群管理最基本的功能.如果采用常用的hash(object)%N算 法,那么在有机器添加或者删除后,就需要大范围的移动原有数 ...

  8. Spring-Security自定义登录页&inMemoryAuthentication验证

    Spring Security是为基于Spring的应用程序提供声明式安全保护的安全性框架.框架下内容比较多,可以做到按照角色权限对请求路径进行限制.今天主要验证自定义登录页,在内存用户存储中进行请求 ...

  9. 基于JDK1.8的LinkedList剖析

    之前写了一篇ArrayList,那么今天就写一篇他的姊妹篇,LinkedList. 众所周知,ArrayList底层数据是数组,可以在O(1)的时间内get到数据,但删除和插入就要O(n)时间复杂度. ...

  10. 彻底解决Yii2中网页刷新时验证码不刷新的问题

    修改vendor/yiisoft/yii2/captcha/CaptchaValidator.php这个文件就可以了,修改的地方见下图: 总结 归根到底,是因为yii2在渲染网页的时候,会先输出js验 ...