django 记录四cookie和session

cookie

  • HTTP协议的无状态和无连接(短链接)的
  • 对于服务器来说每次请求都是全新的,客户端和服务器每次请求的数据是不会保留的
  • 因此产生了cookie,服务器发送一组键值对到浏览器,下次浏览器访问服务端时会自动携带这些数据,以便服务器提取有用信息

django 记录四cookie和session_第1张图片

cookie规范

  • cookie大小上限为4kb
  • 一个服务器最多在客户端浏览器存储20个cookie
  • 一个浏览器最多存储300个cookie
  • 不同浏览器之间不存在共享cookie
  • 一个服务端重复发送cookie会覆盖之前的cookie

 

django中的cookie


# 获取cookie
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)    # sale加盐,max_age后台控制过期时间


# 设置cookie
rep = HttpResponse(...)
rep = render(request, ...)

rep.set_cookie(key,value,...)        # key:键  value:值
rep.set_signed_cookie(key,value,salt='加密盐', max_age=None, ...)
return rep


# 删除cookie
rep.delete_cookie("user")  # 删除用户浏览器上之前设置的usercookie值

参数

参数:

key, 键
value='', 值
max_age=None, 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

 

session

session是在cookie基础上演化而出的,为了保证数据安全,并且保证数据没有上限,服务端运行时候为每个用户(浏览器)创建一个独享的session对象,由于 session为用户浏览器独享,所以用户在访问服务器的web资源时 ,可以把各自的数据放在各自的session中,当用户再去访问该服务器中的其它web资源时,其它web资源再从用户各自的session中 取出数据为用户服务。

django 记录四cookie和session_第2张图片

django中的session


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


# 设置session
request.session['k1'] = 123
request.session.setdefault('k1',123) # 存在则不设置


# 删除值
del request.session['k1']  # django-session表里面同步删除


# 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()


# 会话session的key
session_key = request.session.session_key  获取sessionid的值


# 将所有Session失效日期小于当前日期的数据删除,将过期的删除
request.session.clear_expired()


# 检查会话session的key在数据库中是否存在
request.session.exists("session_key") #session_key就是那个sessionid的值


# 删除当前会话的所有Session数据
request.session.delete()


# 删除当前的会话数据并删除会话的Cookie。
request.session.flush()  # 常用,清空所有cookie---删除session表里的这个会话的记录,如注销操作


# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
# 如果value是个整数,session会在些秒数后失效。
# 如果value是个datatime或timedelta,session就会在这个时间后失效。
# 如果value是0,用户关闭浏览器session就会失效。
# 如果value是None,session会依赖全局session失效策略。

django中的session配置(settings)

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

 

你可能感兴趣的:(web框架,#,django框架)