说一下Session 和 Cookie 的概念
- Session 是服务器用来认证、追踪用户的数据结构,通过判断客户端传来的信息确定用户,确定用户唯一标志是客户端传来的 SessionId
- Cookie 是客户端用来保存用户信息的机制,初次会话时,http 协议会在 Cookie 里记录一个SessionID,之后每次会话时把 SessionID发给服务器
- Session 一般用于用户验证,它默认存储在服务器的一个文件里,当然也可以存储在内存数据库里
- 若是客户端禁用了Cookie,则客户端会用URL重写技术,即会话时在URL的末尾加上 SessionID发给服务器
Cookie
- HTTP协议是无状态的,服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器
cookie
主要是用来记录用户状态,区分用户,状态保存在客户端。
交互过程
- 首次访问
amazon
时,客户端发送一个HTTP请求到服务器端 。服务器端发送一个HTTP响应到客户端,其中包含Set-Cookie
头部 - 客户端发送一个HTTP请求到服务器端,其中包含
Cookie
头部。服务器端发送一个HTTP响应到客户端 - 隔段时间再去访问时,客户端会直接发包含
Cookie
头部的HTTP请求。服务器端发送一个HTTP响应到客户端
cookie技术有4个组件
- 在HTTP响应报文中的一个
cookie
首部行 - 在HTTP请求报文中的一个
cookie
首部行 - 在用户端系统中保留一个
cookie
文件,并由用户的浏览器进行管理 - 位于Web站点的一个后端数据库
也就是说,cookie
功能需要浏览器的支持。如果浏览器不支持cookie
(如大部分手机中的浏览器)或者把cookie
禁用了,cookie
功能就会失效。
修改和删除
- 在修改
cookie
的时候,只需要新cookie
覆盖旧cookie
即可,在覆盖的时候,由于Cookie
具有不可跨域名性,注意name、path、domain
需与原cookie
一致 - 删除
cookie
也一样,设置cookie
的过期时间expires
为过去的一个时间点,或者maxAge = 0
(Cookie的有效期,单位为秒)即可
cookie怎么加强安全
cookie并不安全
secure
属性为true
,仅允许在HTTPS和SSL等安全协议中传输此类Cookie- 在程序中对Cookie内容加密、解密
- 设置
cookie
为HttpOnly,防止js脚本读取cookie,可以有效的防止**XSS(跨站脚本攻击)**攻击
Session
-
Session
是服务器端使用的一种记录客户端状态的机制,使用上比Cookie
简单一些,相应的也增加了服务器的存储压力。 -
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器,而Session保存在服务器。
-
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是
Session
。 -
客户端浏览器再次访问时只需要从该
Session
中查找该客户的状态就可以了。
交互过程
- 当程序需要为某个客户端的请求创建一个
session
时,服务器首先检查这个客户端的请求里是否已包含了一个session
标识(称为SessionId
) - 如果已包含则说明以前已经为此客户端创建过session,服务器就按照SessionId把这个
session
检索出来,使用(检索不到,会新建一个) - 如果客户端请求不包含
SessionId
,则为此客户端创建一个session
并且生成一个与此session
相关联的SessionId
,SessionId
的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个SessionId
将被在本次响应中返回给客户端保存。 - 保存这个
SessionId
的方式可以采用cookie
,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。但cookie
可以被人为的禁止,则必须有其他机制以便在cookie
被禁止时仍然能够把SessionId
传递回服务器。
Cookie 和Session 的区别
cookie
数据存放在客户的浏览器上,session
数据放在服务器上。cookie
相比session
不是很安全,别人可以分析存放在本地的cookie
并进行cookie
欺骗,考虑到安全应当使用session。session
会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用cookie
。- 单个
cookie
保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
。而session
存储在服务端,可以无限量存储 - 将登录信息等重要信息存放为
session
;其他信息如果需要保留,可以放在cookie
中