Django中使用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,默认修改之后才保存(默认)

 

posted @ 2019-07-30 20:37  happy豪  阅读(246)  评论(0编辑  收藏  举报