1.3 Cookie VS Session

在无状态的HTTP协议之上,Cookie和Session都可以为客户端与服务器之间提供有状态的通信过程,它们可以看做是两种不同的状态管理机制,既有区别又有联系。

区别

cookie是一种在浏览器(客户端)存储数据以识别用户的机制,它是存储在客户端上的一小段数据,客户端通过HTTP协议和服务器进行cookie交互。其中利用HTTP头部字段:Cookie和Set-Cookie(),如

  • HTTP Response Header,Set-Cookie:key=value; PHPSESSID=**;path=path; domain=domain; max-age=max-age-in-seconds; expires=date-in-GMTString-format; secure; httponly
  • HTTP Request Header,Cookie: key1=value1;key2=value2...

在1.1小节中提到,cookie的使用降低了网络通信的安全性,同时也暴露了用户隐私。但由于它的便捷性以及特定的使用场景,在互联网中仍广泛运用。

2. Session

session是一种在服务器端存储数据以识别用户的机制。session本质与cookie没有什么区别,都是针对HTTP协议的局限性而提出的一种保持客户端与服务器通信状态的机制。但实现不同,session只将一个称作为session id的key值存储在客户端浏览器中,而将实际的数据部分存储在后端的服务器上。这样,在一定程度上保证了网站的安全性与用户隐私。

联系

session与cookie都是一种保持客户端与服务器通信状态的机制。除了实现机制的不同之外,二者之间又有一定的交集。

session的实现由很多种,其中一种方式便是借助于cookie机制:通过在cookie中存储sessionID实现session信息的传递。

当然session也有另外的实现方法:URL重写。具体做法是:当浏览器客户端禁用cookie时,可通过重写URL的方式实现session:可手动添加(在url后添加sessionID)也可使之自动添加(如配置php.ini中的session.use_trans_sid=1,则连接后浏览器自动在url上添加sessinID传递给服务器)。但是这种方式不太安全,一般均采用第一种方法。

References

1、http://stackoverflow.com/questions/6253633/cookie-vs-session

2、http://www.freebuf.com/articles/web/10369.html

3、https://imququ.com/post/host-only-cookie.html

results matching ""

    No results matching ""