COOKIE与SESSION

COOKIE与SESSION

cookie不属于http协议范围,由于http协议无法保持状态,但实际情况下,在我们登录成功后,我们下次再登录,不希望再重复的输入账号密码,因此cookie就是在这样一个场景下诞生。

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

cookie虽然在一定程度上解决了保持状态的问题,但是由于cookie本身只支持4096字节,以及cookie保存在客户端,可能被拦截或窃取,即存在安全隐患。因此需要一种新的东西,保存在服务端,支持更多字节,安全性较高。这就是session。

Django实现的cookie

1、获取cookie

request.COOKIES['key']
request.get_signed_cookie(key,default=RAISE_ERROR ,salt='',max_age=None)
#参数
	default:默认值
        salt:加密盐
        max_age:cookie的过期时间,默认是秒为单位

2、设置cookie

rep = HttpResponse(...) 或 rep = render(request, ...) 或 rep = redirect()
 
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐',...)

参数:


def set_cookie(self, key,                 键
             value='',            值
             max_age=None,        有效时间
             expires=None,        有效时间
             path='/',           Cookie生效的路径,
                                         浏览器只会把cookie回传给带有该路径的页面,这样可以                                          避免将cookie传给站点中的其他的应用。
                                         / 表示根路径,特殊的:根路径的cookie可以被任何url的									  页面访问
             
                     domain=None,         Cookie生效的域名
                                        
                                          你可用这个参数来构造一个跨站cookie。
                                          如, domain=".example.com"
                                          所构造的cookie对下面这些站点都是可读的:
                                          www.example.com 、 www2.example.com 
                         和an.other.sub.domain.example.com 。
                                          如果该参数设置为 None ,cookie只能由设置它的站点读										取。

             secure=False,        如果设置为 True ,浏览器将通过HTTPS来回传                                                   cookie。
             httponly=False       只能http协议传输,无法被JavaScript获取
                                         (不是绝对,底层抓包可以获取到也可以被覆盖)
          ): pass



3、删除cookie

response.delete_cookie('cookie_key',path-='/',domain=name)

cookie存储到哭客户端:

优点:数据存储在客户端可以减轻服务端的压力,提高网站的性能

缺点:安全性不高,在客户端机很容易被查看或被破解用户会话信息


Django实现的session

1、基本操作

1、设置Sessions值
          request.session['session_name'] ="admin"
2、获取Sessions值
          session_name = request.session["session_name"]
3、删除Sessions值
          del request.session["session_name"]
4、检测是否操作session值
          if "session_name" is request.session :
5、get(key, default=None)
 
fav_color = request.session.get('fav_color', 'red')
 
6、pop(key)
 
fav_color = request.session.pop('fav_color')
 
7、keys()
 
8、items()
 
9、setdefault()
 
10、flush() 删除当前的会话数据并删除会话的Cookie。
            这用于确保前面的会话数据不可以再次被用户的浏览器访问
            例如,django.contrib.auth.logout() 函数中就会调用它。
 
 
11 用户session的随机字符串
        request.session.session_key
  
        # 将所有Session失效日期小于当前日期的数据删除
        request.session.clear_expired()
  
        # 检查 用户session的随机字符串 在数据库中是否存在
        request.session.exists("session_key")
  
        # 删除当前用户的所有Session数据
        request.session.delete("session_key")
  
        request.session.set_expiry(value)
            * 如果value是个整数,session会在些秒数后失效。
            * 如果value是个datatime或timedelta,session就会在这个时间后失效。
            * 如果value是0,用户关闭浏览器session就会失效。
            * 如果value是None,session会依赖全局session失效策略。值


posted @ 2019-04-10 23:17  Dandelion-L  阅读(91)  评论(0)    收藏  举报