zoukankan      html  css  js  c++  java
  • 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储存在服务器上

    tiFRHI.md.png

  • 相关阅读:
    在excel实现多级联动
    发送邮件使用html模板的实现的大致思路
    设计模式的定义和分类
    yb课堂之用户登陆校验拦截器开发 《十一》
    CTF中常用的php伪协议利用
    Docker
    从零开始的Wordpress个人博客搭建
    .htaccess文件配置理解
    disable_function绕过--利用LD_PRELOAD
    信息安全实习生面试小结
  • 原文地址:https://www.cnblogs.com/syy1757528181/p/12978095.html
Copyright © 2011-2022 走看看