cookie和session基础以及在Django中应用
看了会视频,终于搞懂了~
1.cookie
cookie:保存状态
cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁”了。
cookie缺点:
1.最大支持4kb,现在也有厂商推出8kb,但是内存总归有限。
2.cookie保存在客户端,容易被拦截或窃取。==》session诞生:存储字节大,存储内容多,保存在服务器,有较高的安全性,除非你服务器被攻击。
服务端给客户端每个cookie分配唯一的id,用户在访问时,通过cookie就知道访问的人是谁。然后我们再根据不同的cookie的id,在服务器上保存一段时间的私密资料,如“账号密码”等等。
cookie和session其实是共通性的东西,不限于语言和框架
session和cookie都是类似key:value的形式
把cookie保存的所有键值对信息都放到session里,session发送一个随机字符串给cookie,这样cookie就只有一个随机字符串,相当于一把钥匙。
session里key是发送给cookie的随机字符串,value是cookie原来的键值对。
session的键值对可以存在文件里,可以放在缓存里,可以放在数据库里。
登陆应用原理:
1.如果知道后台的url地址,我们就不需要通过登陆才能进入别的页面,所以需要一个验证过程,先登录才能进入其他页面。
2.认证机制:一旦我们通过了认证。服务器端就会发送一组随机唯一的字符串(假设是123abc)到浏览器端,这个被存储在浏览端的东西就叫cookie。
而服务器端也会自己存储一下用户当前的状态,比如login=true,username=hahaha之类的用户信息。但是这种存储是以字典形式存储的,字典的唯一key就是刚才发给用户的唯一的cookie值。那么如果在服务器端查看session信息的话,理论上就会看到如下样子的字典==》服务端key就是返回给客户端的cookie
{'123abc':{'login':true,'username:hahaha'}}
3.打开新浏览器依然需要重新登陆,服务端的key:value都是被加密的,看不到明文。
cookie的基本使用
1.获取cookie
request.COOKIES.get(''islogin'',None) # 如果有就获取,没有就默认为None
2.设置cookie
obj.set_cookie("islogin",True) # 服务端设置cookie的值。第一个参数是键,第二个参数是值 obj.set_cookie("islogin",True,20) # 20代表过期时间
3.删除cookie
obj.delete_cookie("cookie_key",path="/",domain=name)
登陆认证实例:
cookie存储到客户端
优点:数据存储在客户端。减轻服务端的压力,提高网站的性能
缺点:安全性不高,在客户端很容易被查看或破解用户会话信息
session的基本使用
如果有时候request.session拿不到session需要把中间件那个常量改成MIDWARE_CLASSES
1.session的常用操作
1 1、设置session值 2 request.session["session_name"]="admin" 3 2、获取session值 4 session_name = request.session("session_name") 5 3、删除session值 6 del request.session["session_name"] 删除一组键值对 7 request.session.flush() 删除一条记录 8 4、检测是否操作session值 9 if "session_name" is request.session:
2.一些非常用操作
1 5、get(key, default=None) 2 3 fav_color = request.session.get('fav_color', 'red') 4 5 6、pop(key) 6 7 fav_color = request.session.pop('fav_color') 8 9 7、keys() 10 11 8、items() 12 13 9、setdefault() 14 15 10、flush() 删除当前的会话数据并删除会话的Cookie。 16 这用于确保前面的会话数据不可以再次被用户的浏览器访问 17 例如,django.contrib.auth.logout() 函数中就会调用它。 18 用户session的随机字符串 19 request.session.session_key 20 21 # 将所有Session失效日期小于当前日期的数据删除 22 request.session.clear_expired() 23 24 # 检查 用户session的随机字符串 在数据库中是否 25 request.session.exists("session_key") 26 27 # 删除当前用户的所有Session数据 28 request.session.delete("session_key") 29 30 request.session.set_expiry(value) 31 * 如果value是个整数,session会在些秒数后失效。 32 * 如果value是个datatime或timedelta,session就会在这个时间后失效。 33 * 如果value是0,用户关闭浏览器session就会失效。 34 * 如果value是None,session会依赖全局session失效策略。
3.流程解析