cookie和session

会话保持(也叫session共享)

面试题:

  • 开发层面实现
    • 记录用户的登录状态,将登录状态保存到我们的redis服务器中(更倾向),nfs共享存储,mysql数据库
  • 我们从运维层面实现
    • 因为开发没有写会话保持的功能,所以我们只能在nginx中使用upstream模块的ip_hash调度算法,但是这个算法,可能会负载不均衡,有弊端...

什么是session?服务器存储,session是为了保护cookie

什么是cookie?浏览器存储,有生存时间,过了生存时间就要重新登录重新生成

session

1.
Session是用于存放用户与web服务器之间的会话,即服务器为客户端开辟的'存储空间'
2.
Session存在的意义是'为了提高安全性,它将关键数据存在服务器端'。与cookie不同,
cookie则是将数据存在'客户端的浏览器中'。
因此cookie是较为危险的,若客户端遭遇黑客攻击,信息容易被窃取,数据也可能被篡改,
而运用Session可以有效避免这种情况的发生
3.Session的'生命周期'
Session存储在服务器的内存中(为了高速存取)(同时保存在磁盘)。
Session何时生效
Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,
只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
Tomcat中Session的默认失效时间为'20分钟'。(从session不活动的时候开始计算,如果session一直活动,session就总不会过期)

区别

当浏览器 第一次发送请求时,服务器自动生成了一个HashTable和一个Session
 ID用来唯一标识这个HashTable,并将其通过响应
发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session 
ID放在请求中'一并'发送到服务器上,服务器从请求中提取出Session ID,
并和保存的所有Session ID进行'对比',找到这个用户对应的HashTable。


1、存储位置不同
cookie的数据信息存放在客户端浏览器上。
session的数据信息存放在服务器上。
2、存储容量不同
单个cookie保存的数据<=4KB,一个站点最多保存20个Cookie。
对于session来说并没有上限,但出于对服务器端的性能考虑,session内不要存放过多的东西,并且设置session删除机制。
4.隐私策略不同
cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是不安全的。
session存储在服务器上,对客户端是透明对,不存在敏感信息泄漏的风险
5、有效期上不同
一般这个值会有一个时间限制,超时后毁掉这个值,'默认是20分钟'
开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,
因而session不能达到长期有效的效果。
6、服务器压力不同
cookie保管在客户端,不占用服务器资源。对于并发用户十分多的网站,cookie是很好的选择。
session是保管在服务器端的,每个用户都会产生一个session。假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存。
7、跨域支持上不同
cookie支持跨域名访问。
session不支持跨域名访问。

Nginx负载均衡会话保持

在使用负载均衡的时候会遇到会话保持的问题,可通过如下方式进行解决。

  1. 使用nginx的 ip_hash ,根据客户端的IP,将请求分配到对应的IP上

  2. 基于服务端的 session 会话共享(NFS,MySQL,memcache,redis,fifile)

    在解决负载均衡会话问题,我们需要了解 session 和 cookie 的区别。 浏览器端存的是 cookie ,每次浏览器发请求到
    服务端时,报文头是会自动添加 cookie 信息的。 服务端会查询用户的 cookie 作为key去存储里找对应的value(session)
    同一域名下的网站的 cookie 都是一样的,所以无论几台服务器,无论请求分配到哪一台服务器上同一用户的
    cookie 是不变的。也就是说 cookie 对应的 session 也是唯一的。所以,这里只要保证多台业务服务器访问同一个
    共享存储服务器(NFS,MySQL,memcache,redis,fifile)就行了。

总结

  1. 需要登录的网站才需要做会话保持
  2. cookie储存在客户端的浏览器上
  3. session储存在服务器上

cookie和session_第1张图片

你可能感兴趣的:(cookie和session)