最全:cookie与session的联系与区别 以及 应用场景

一、基础知识:

**

Cookie:

**
保存在客户端的数据叫做 cookie。

注意点:
(1)cookie是保存在客户端
(2)cookie是基于域名(IP)的
1、概念:

(1)cookie,有时也用其复数形式:cookies,
指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
(2)cookie名称和值可以由服务器开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等。
(3)服务器可以利用cookies包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。

2、cookie的特点:

1)cookie以键值对的格式进行信息的存储。
(2)cookie基于域名安全,不同域名的cookie是不能互相访问的,
如访问itcast.cn时向浏览器中写了cookie信息,使用同一浏览器访问baidu.com时,无法访问到itcast.cn写的cookie信息。
(3)当浏览器请求某网站时,会将浏览器存储的跟网站相关的所有cookie信息提交给网站服务器。

3、大体流程:

1)第一次请求过程:
①我们的浏览器第一次请服务器的时候,不会携带任何cookie信息。
②服务器接收到请求后,发现 请求中没有任何cookie信息。
③服务器设置一个cookie,这个cookie设置在响应中。
④我们的浏览器接收到这个响应之后,发现响应中有cookie信息,浏览器会将cookie信息保存起来。

(2)第二次及其之后的过程:

⑤当我们的浏览器第二次及其之后请求都会携带cookie信息。
⑥我们的服务器接收到请求之后,会发现请求中携带的cookie信息,这样的话就认识是谁的请求了

4、(http协议角度)深入掌握cookie的流程:
第一次:

1)我们是第一次请求服务器,不会携带任何cookie信息,请求头中没有任何cookie信息。
(2)服务器会为响应设置cookie信息,响应头中有set_cookie信息。

第二次及其之后的:

3)我们第二次及其之后的请求都会携带cookie信息,请求头中有cookie信息。
(4)(可选)在当前我们的代码中,没有再 在响应头中设置cookie,所以响应头中没有set_cookie信息。

5、cookie的过期时间和删除

默认过期时间是浏览器关闭
可以通过max_age参数设置过期时间
通过delete_cookie方法删除cookie
通过修改max_age参数为0删除cookie

session:

保存在服务器的数据叫做 session

注意点:
(1)session需要依赖于cookie
(2)如果浏览器禁用了cookie,则session不能实现

1、概念:

在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下)。
因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。

2、大体流程:
第一次请求:

①我们第一次请求的时候可以携带一些信息(用户名/密码) cookie中没有任何信息。
②当我们的服务器接收到这个请求之后,进行用户名和密码的验证,验证没有问题可以设置session信息。
③在设置session信息的同时(session信息保存在服务器端),服务器会在响应头中设置一个 sessionid的 cookie信息(由服务器自己设置的,不是我们设置的)
④客户端(浏览器)在接收到响应之后,会将cookie信息保存起来(保存 sessionid的信息)。

第二次及其之后的请求:

⑤第二次及其之后的请求都会携带 session id信息。
⑥当服务器接收到这个请求之后,会获取到sessionid信息,然后进行验证,验证成功,则可以获取session信息(session信息保存在服务器端)。

3、http协议角度)深入掌握session的流程:
第一次请求:

1)第一次请求,在请求头中没有携带任何cookie信息。
(2)我们在设置session的时候,session会做2件事:
①第一件:将数据保存在数据库中。
②第二件:设置一个cookie信息,这个cookie信息是以 sessionid为key value为xxxxx
cookie肯定会以响应的形式在响应头中出现

第二次及其之后的:

3)都会携带cookie信息,特别是 sessionid。

二、联系与区别

1、Session与Cookie区别和联系:

Cookies是属于Session对象的一种。
但有不同,Cookies不会占服务器资源,是存在客服端内存或者一个cookie的文本文件中;而“Session”则会占用服务器资源。
所以,尽量不要使用Session,而使用Cookies。
但是我们一般认为cookie是不可靠的,session是可靠地,但是目前很多著名的站点也都以来cookie。
有时候为了解决禁用cookie后的页面处理,通常采用url重写技术,调用session中大量有用的方法从session中获取数据后置入页面。

注意:Session和Cookie的主要区别:

Cookie是把用户的数据写给用户的浏览器。
Session技术把用户的数据写到用户独占的session中。
Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。

**

三、应用场景

**
1、Cookies与Session的应用场景:

Cookies的安全性能一直是倍受争议的。
虽然Cookies是保存在本机上的,但是其信息的完全可见性且易于本地编辑性,往往可以引起很多的安全问题。
所以Cookies到底该不该用,到底该怎样用,就有了一个需要给定的底线。

先来看看,网站的敏感数据有哪些。

登陆验证信息。
一般采用Session(“Logon”)=true or false的形式。
用户的各种私人信息,比如姓名等,某种情况下,需要保存在Session里
需要在页面间传递的内容信息,比如调查工作需要分好几步。
每一步的信息都保存在Session里,最后在统一更新到数据库。

``

注意:
2、cookie最典型的应用是:
(一):

判断用户是否登陆过网站,以便下次登录时能够直接登录。
如果我们删除cookie,则每次登录必须从新填写登录的相关信息。

(二):

另一个重要的应用是“购物车”中类的处理和设计。
用户可能在一段时间内在同一家网站的不同页面选择不同的商品,可以将这些信息都写入cookie,在最后付款时从cookie中提取这些信息,当然这里面有了安全和性能问题需要我们考虑了。

你可能感兴趣的:(Python_learning)