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.流程解析

 

posted @ 2018-09-13 21:02  Roc_Atlantis  阅读(168)  评论(0编辑  收藏  举报