cookie机制 与 session机制

cookie

cookie机制

在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆. 而Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。要跟踪该会话,必须引入一种机制。

Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足。在Session出现之前,基本上所有的网站都采用Cookie来跟踪会话。

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

浏览器下的cookie:

1、django中使用cookie

request.COOKIES['key'] #代表客户端发送的全部cookie,以键值对方式存储,可以理解为一个字典
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None) 
    #参数:
        default: 默认值
           salt: 加密盐
        max_age: 后台控制过期时间

request.COOKIES['key']        #key存在则获取,不存在则报错,不建议使用
request.COOKIES.get('key')    #获取cookie,不存在返回None,建议使用

2、设置Cookie

#创建响应对象
response=render(request,'index.html')
response=redirect('index')
#设置cookie
response.set_cookie('key',value) #默认关闭浏览器就失效
response.set_signed_cookie(key,value,salt='加密盐',...)   #设置带签名的cookie

其他参数:
        key,              键
        value='',         值
        max_age=None,     cookie失效时间,单位秒
        expires=None,     cookie失效时间戳(IE requires expires, so set it if hasn't been already.),参数datetime对象
        path='/',         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
        domain=None,      Cookie生效的域名
        secure=False,     https传输
        httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖

带签名的cookie:设置时候加签,cookie内容是加密的

由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie。

<script src='/static/js/jquery.cookie.js'>
 
</script> $.cookie("key", value,{ path: '/' });

3、 删除cookie

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

cookie存储到客户端

       优点:

           数据存在在客户端,减轻服务器端的压力,提高网站的性能。

       缺点:

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

session会话

因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的、独立的。通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户。

为了实现连接状态的保持功能,网站会通过用户的浏览器在用户机器内被限定的硬盘位置中写入一些数据,也就是所谓的Cookie。通过Cookie可以保存一些诸如用户名、浏览记录、表单记录、登录和注销等各种数据。但是这种方式非常不安全,因为Cookie保存在用户的机器上,如果Cookie被伪造、篡改或删除,就会造成极大的安全威胁,因此,现代网站设计通常将Cookie用来保存一些不重要的内容,实际的用户数据和状态还是以Session会话的方式保存在服务器端。

Session依赖Cookie!但与Cookie不同的地方在于Session将所有的数据都放在服务器端,用户浏览器的Cookie中只会保存一个非明文的识别信息,比如哈希值。

Django提供了一个通用的Session框架,并且可以使用多种session数据的保存方式:

保存在数据库内

保存到缓存

保存到文件内

保存到cookie内

通常情况,没有特别需求的话,请使用保存在数据库内的方式,尽量不要保存到Cookie内。

Django的session框架默认启用,并已经注册在app设置内,如果真的没有启用,那么参考下面的内容添加有说明的那两行,再执行migrate命令创建数据表,就可以使用session了。

session和cookie区别

1.作用

服务器是如何判断你已经登录的呢。那就是用的cookie或者session功能。

2.区别

cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

3.session流程

1、自动生成一段字符串

2、将字符串发送到客户端的浏览器,同时把字符串当做key放在session里。(可以理解为session就是一个字典)

3、在用户的session对应的value里设置任意值

猜你喜欢

转载自www.cnblogs.com/bigbox/p/12193860.html