cookie和session讲解

1.cookie是什么?

        保存在浏览器本地上的一组组键值对

2.session是什么?

        保存在服务器上的一组组键值对

3.为什么要有cookie?

         HTTP是无协议状态,每次请求都是互相独立的,没有办法保存状态

4.为什么要有session?

      cookie的大小和个数受到浏览器的限制

      cookie保存在本地浏览器不太安全

5.cookie特性:

       由服务让浏览器进行设置返回set-cookie的响应头

       浏览器将键值对保存在本地,有权利不保存,下次访问是继续携带

django中操作cookie

  

# 设置cookie
response = HttpReponse('xxx')
response.set_cookie(key,value) # max_age  超时时间  path 生效的路径 
response.set_signed_cookie(key,value,salt='xxx')

# 获取cookie 
request.COOKIES  {}  .get(key)
request.get_signed_cookie(key,salt='xxx',default='')

# 删除cookie   将值设置为空 超时时间设置为0 
response.delete_cookie(key)

6.session的过程

  第一个请求,没有cookie,设置键值对,根据浏览器生成一个唯一表是,给一个字典设置键值对

将字典转成字符串(json序列化)进行加密,将唯一标识和字符串保存在数据库中(django-session)返回给浏览器唯一标识(sessionid)的cookie,下次请求携带sessionid,服务器根据session找到对应的数据(session-data)进行解密,进行反序列化,根据key获取对应的值

  

# 设置session
reqeust.session[key] = value

# 获取
reqeust.session[key]
reqeust.session.get(key)

# 删除
request.session.pop(key)   del reqeust.session[key] 
request.session.delete()   # 删除所有的键值对   不删除cookie
request.session.flush()    # 删除所有的键值对   也删除cookie

# 其他
默认的超时时间(2周)
request.session.set_expiry(value)     # 设置超时时间
request.session.clear_expired()    # 清除已经失效的session数据


from django.conf import global_settings

SESSION_COOKIE_NAME = 'sessionid' 
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
SESSION_SAVE_EVERY_REQUEST = True  # 每次请求都更新session数据
SESSION_EXPIRE_AT_BROWSER_CLOSE = True  # cookie在浏览器关闭时就失效
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 默认是数据库  文件  缓存  数据库+缓存  加密cookie

  

 

原文地址:https://www.cnblogs.com/wenyeqing/p/13645955.html