为什么会有cookie和session

由于http协议是无状态的,无法记住用户是谁

什么是cookie

cookie具体指的是一小段信息,他是服务器发送出来存储在浏览器是上的一组组键值对,下次访问服务器是浏览器会自动携带这些键值对,以便服务器提取有效信息,同时也意味着浏览器其实可以拒绝服务端的"命令", 默认情况下 浏览器都是直接让服务端设置键值对

cookie工作原理

cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。

Django中操作Cookie

django必会三板斧
	return HttpResponse()
	return render()
	return redirect()
	
	变形:
	obj1 = HttpResponse()
	return obj1
	obj2 = render()
	return obj2
	obj3 = redirect()
	return obj3
		
	设置cookie
		obj1.set_cookie()
	获取
		request.COOKIES.get()
	删除
		obj1.delete_cookie()

参数:

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是保存在服务器上的键值对

django session默认的过期时间是14天

操作session

设置session
	request.session['key'] = value  # 仅仅只会在内存产生一个缓存
	"""
	1.django内部自动生成了随机的字符串
	2.在django_session表中存入数据
		session_key          session_data         date
		随机字符串1              数据1            ...
		随机字符串2              数据2            ...
		随机字符串3              数据3            ...
	3.将产生的随机字符串发送给浏览器 让浏览器保存到cookie中
		sessionid:随机字符串

	"""  
获取session
	request.session.get('key')
	"""
	1.浏览器发送cookie到django后端之后 django会自动获取到cookie值
	2.拿着随机字符串去django_session表中比对 是否有对应的数据
	3.如果比对上了 就讲随机字符串所对应的数据 取出赋值给request.session
	   如果对不上 那么request.session就是个空
	   
	"""
		
django session表是针对浏览器的
不同的浏览器来 才会有不同的记录

删除session
	request.session.delete()  # 只删除服务端的session
	
	request.session.flush()  # 浏览器和服务端全部删除


session也可以设置超时时间
	request.session.set_expiry(value多种配置)
		
	* 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。
posted on 2019-10-30 17:08  黑糖A  阅读(121)  评论(0编辑  收藏  举报