cookie 与 session

cookie与session

cookie与session

cookie
服务端保存在客户端浏览器上的信息都可以称之为cookie

session
数据是保存在服务端的

token
session虽然数据是保存在服务端的 但是禁不住数据量大
服务端不再保存数据
  	信息 + 加密后信息
    浏览器下次访问的时候带着该信息 将信息加密,比对,只有服务端知道加密方式
	
总结:
    1.cookie就是保存在客户端浏览器上的信息
    2.session就是保存在服务端上的信息
    3.session是基于cookie工作的(其实大部分的保存用户状态的操作都需要使用到cookie)

Cookie操作

request.COOKIE

客户端浏览器可以选择拒绝保存 那么网站登陆功能都无法使用

obj = HttpResponse对象
# 操作cookie
return obj
如果你想要操作cookie,你就不得不利用obj对象

设置cookie
	obj.set_cookie(key,value)
获取cookie
	request.COOKIES.get(key)
在设置cookie的时候可以添加一个超时时间
	obj.set_cookie('username', 'jason666',max_age=3,expires=3)
	
	max_age
	expires
		两者都是设置超时时间的 并且都是以秒为单位
		需要注意的是 针对IE浏览器需要使用expires
        
主动删除cookie(注销功能)
	obj.delete_cookie(key)
    
# 加盐
obj.set_signed_cookie(key,value,salt='盐')
request.get_signed_cookie(key,salt='盐')

session操作

>>> dict.keys()
dict_keys(['Name', 'Age'])
可以遍历,不可以索引

get方法:普通键值对,自定义的,,

session数据是保存在服务端的(存?),给客户端返回的是一个随机字符串
sessionid:随机字符串
	
在默认情况下操作session 需要django默认的django_session表
默认过期时间是14天
	

设置session	
request.session['key'] = value

获取session
request.session.get('key')
得到的是固定浏览器的那一个

设置过期时间
request.session.set_expiry()
	括号内可以放四种类型的参数
		1.整数						秒
		2.日期对象			           指定日期
		3.0							 当前浏览器窗口关闭立刻失效
		4.不写						session默认的失效时间

清除session	
	request.session.delete()  # 只删服务端的 客户端的不删
	request.session.flush()  # 浏览器和服务端都清空(推荐使用)
	
django_session表中的数据条数是取决于浏览器的
	同一个计算机上(IP地址)同一个浏览器只会有一条数据生效
	(当session过期的时候可能会出现多条数据对应一个浏览器,但是该现象不会持续很久,内部会自动识别过期的数据清除 也可以通过代码清除)


内部发送了那些事
1.django内部会自动帮你生成一个随机字符串
2.django内部自动将随机字符串和对应的数据存储到django_session表中
            2.1先在内存中产生操作数据的缓存
            2.2在响应结果django中间件的时候才真正的操作数据库
3.将产生的随机字符串返回给客户端浏览器保存


内部发送了那些事
1.自动从浏览器请求中获取sessionid对应的随机字符串
2.拿着该随机字符串去django_session表中查找对应的数据
3.如果比对上了 则将对应的数据取出并以字典的形式封装到request.session中
如果比对不上 则request.session.get()返回的是None
原文地址:https://www.cnblogs.com/pythonwl/p/13520033.html