zoukankan      html  css  js  c++  java
  • Djangou中使用cookie和session

    一、会话跟踪

    1. 我们先需要了解是什么是会话!可以把会话理解为客户端与服务器之间的一次会话,在一次会话中可能会包含多次请求和响应,例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器,从双方接通电话的那一刻起,会话就开始了,到某一方挂断电话表示会话结束。在通话过程中,你会向10086发送多个请求,那么这多个请求都会在一个会话中。客户向某一服务器发送出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束。

    2. 在一次绘画的多次请求中数据共享,这就是会话跟踪计数

    二、cookie

    1. 什么是cookie

      1. 首先来讲,cookie是浏览器技术,cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,可以理解为服务端给客户端的一个小甜点,下次访问服务器时会自动携带这些键值对,以便服务器提取有用信息。

    2. cookie的原理

      1. cookie的工作原理是:浏览器访问服务端,带着一个空的cookie,然后由服务器产生内容,浏览器收到响应后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是谁了。

    3. cookie与HTTP头

      1. cookie是通过HTTP请求和响应头在客户端和服务器端传递的

      2. cookie:请求头,客户端发送给服务器端

      3. 格式:cookie:a=A;b=B。既多个cookie用分号隔开

      4. set-cookie:响应头,服务器端发送给客户端;

    4. cookie的覆盖

      1. 如果服务器端发送重复的cookie那么会覆盖原有的cookie,例如客户端的第一个请求服务器端发送的cookie是set-cookie:a=A;第二个请求服务器端发送的是:set-cookie:a=AA,那么客户端只留下一个cookie,即:a=AA

    三、django中操作cookie

    1. Ctrl + Shift + del三个键来清除页面缓存和cookie,将来这个操作你会用的很多。

    2. 获取cookie

      1. request.COOKIES['key']
        request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=Non
        default:默认值
        salt:加密盐
        max_age:后台控制过期时间
    3. 设置cookie

      rep = Httpresponse(...)
      rep = render(request,''')
      
      rep.set_cookie(key,value,...)
      rep.set_signed_cookie(key,value,salt='加密盐',max_age=None,...)

      参数

      1. key:键

      2. value:值

      3. max_age=None,超时时间

      4. expires=None,超时时间

      5. path='/',cookie生效的域名

      6. secure=False,https传输

      7. httponly=False 只能http协议传输,无法被Javascript获取

      
      
    4. 删除cookie

      1.   
        def login(request):
            rep = redrect("/login/")
            rep.delete_cookie("user") #删除用户浏览器上之前设置的usercookie值
            return rep

    四、session

     Session是服务器端技术,利用这个技术,服务器在运行时可以为每一个用户的浏览器创建一个独立的session对象,由于session为用户浏览器独享,所以用户在访问浏览器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问该服务器中的其他web资源时,其他web资源再从用户各自的session中取出数据为用户服务

    五、django中操作session  

      1.获取值

    request.session['k1']
    
    request.session.get('k1',none)
    #request.session这句是帮你从cookie里面将sessionid的值取出来,
    将django-session表里面的对应sessionid的值的那条记录中的session-data字段的数据给你拿出来(并解密),get方法就取出k1这个键对应的值
    查看所有的键、值、键值对 request.session.keys() request.session.values() request.session.items()

      2.设置值

    request.session['k1'] = 123
    
    request.session.setdefault('k1',123) #没有就添加,有就不变
    #帮你生成随机字符串,帮你将这个随机字符串和用户数据(加密后)和过期时间保存到了django-session表里面,
    帮你将这个随机字符串以sessionid:随机字符串的方式添加到cookie里面返回给浏览器,这个sessionid的名字是可以改的
    #注意一个事情,django-session这个表,你不能通过orm来控制,因为你的models.py里面没有这个表的对应关系

      3.删除值

    del request.session['k1'] #django-session表里面同步删除
    
    #删除当前的会话数据并删除会话的cookie。
    request.session.flush() #常用,清空所有cookie --- 删除session表里这个会话的记录,

    Djangou中的session配置

    Django中默认支持session其内部提供了5种类型的session供开发者使用
    1. 数据库Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
    
    2. 缓存Session
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
    SESSION_CACHE_ALIAS = 'default'                            # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
    
    3. 文件Session
    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'   # 引擎
    
    其他公用设置项:
    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,默认修改之后才保存(默认)
  • 相关阅读:
    不要再浪费时间阅读文献技巧本
    Reporting Services 中的分页方式Report Builder 3.0
    国外实时数据库比较
    转VS2010 C++下编译调试MongoDB源码 代震军
    C#中异步和多线程的区别
    Python seems amazing!
    嵌入式(armcc)自动调用函数
    MSSQL2008 日志文件收缩
    萝卜地...分享;
    Apache配置多个站点;
  • 原文地址:https://www.cnblogs.com/wang-xing-hao/p/11272590.html
Copyright © 2011-2022 走看看