每日面试题(day01)cookies 和session

cookies 和session

1.cookie是什么

Cookie: “客户端会话技术”,将数据保存到客户端,以后"每次请求都携带Cookie数据进行访问"

2.为什么要使用cookie

  • “web程序是使用HTTP协议传输的”,而HTTP协议是"无状态的协议",“对于事务处理没有记忆能力”

    “缺少状态意味着如果后续处理需要前面的信息,则它必须重传”,这样可能导致每次连接传送的数据量增大

    另一方面,如果服务器不需要获取之前的信息的时候它的应答就较快

  • “使用cookie可以解决这个问题,实现数据的共享”

3.cookie什么时候产生

  • 客户端向服务器端发送一个请求时,服务端向客户端发送一个Cookie然后浏览器将Cookie保存

  • Cookie有两种保存方式:

    1.Cookie保存在内存中

    2.保存在客户端的硬盘中, 之后每次HTTP请求浏览器都会将Cookie发送给服务器端

4.cookie的工作原理

  1. 浏览器端第一次发送请求到服务器端
  2. “服务器端创建Cookie”,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端
  3. 浏览器端"再次访问服务器端"时会"携带服务器端创建的Cookie"
  4. 服务器端"通过Cookie中携带的数据区分不同的用户"

5.cookie的基本使用

  • 发送 Cookie
创建Cookie对象,设置数据
Cookie cookie = new Cookie("key","value");   //键值

发送Cookie到客户端:使用response对象
response.addCookie(cookie);

  • 获取 Cookie
获取客户端携带的所有Cookie,使用request对象
Cookie[] cookies = request.getCookies();

1.遍历数组,获取每一个Cookie对象: for
2.使用Cookie对象方法获取数据
cookie.getName();     //获取键

cookie.getValue();    //获取值


6.cookie的缺点

  • “数量受到限制”:

    单个cookie保存的数据<=4KB,一个站点一般保存20~50个Cookie

    (不同浏览器不一样,Sarafi和Chrome对每个域的Cookie数目没有严格限制)
    
  • “是不安全的”:

    cookie对客户端是可见的,别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,

    所以它是不安全的

  • “浏览器可以禁用Cookie”,禁用Cookie后,也就无法享有Cookie带来的方便

7.cookie的使用场景

1.对安全性要求不高
2.不需要大量数据

session

1.session是什么

* Session: "服务端会话跟踪技术,将数据保存到服务端"
JavaEE 提供 "HttpSession接口", 来实现"一次会话的多次请求间数据共享功能"

2.session的基本使用

 * request.getSession();    //获取Session对象
                     
 * Session对象功能
                         
 * void setAttribute(String name, Object o): "存储数据到 session 域中"
                         
 * Object getAttribute(String name) : 根据 key,"获取值"
                         
 * void removeAttribute(String name): 根据 key,"删除该键值对"

3.session的工作原理

 1. 浏览器端第一次发送请求到服务器端,服务器端创建一个Session
同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID)
然后将该Cookie发送至浏览器端
              
2.浏览器端发送第N次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象
           
3.服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户


4.session 活化

 * 服务器重启后,Session中的数据是否还在?
     
 * 钝化: 在"服务器正常关闭后" , "Tomcat自动将 Session数据写入硬盘的文件中"
                
 * 活化: "再次启动服务器后", 从"文件中加载数据到Session中"

session 和cookie 的区别

1.存储位置不同                  
  * "Cookie"的数据信息存放在"客户端浏览器"上;                 
  * "Session"的数据信息存放在"服务器"上;
                     
2.存储容量不同                 
  * "单个Cookie保存的数据<=4KB,一个站点一般保存20~50个Cookie"(不同浏览器不一样,Sarafi和Chrome对每个域的Cookie数目没有严格限制)                  
  
  * 对于Session来说并"没有上限",但出于对服务器端的性能考虑,Session内不要存放过多的东西,并且设置Session删除机制 (或者采用缓存技术代替session)
                     
3.存储方式不同
  * Cookie中"只能保管ASCII字符串",并需要通过编码方式存储为Unicode字符或者二进制数据
 
  * Session中能够"存储任何类型的数据" ,包括且不限于string,integer,list,map等
                     
4.安全性不同                  
  * "Cookie对客户端是可见的",别有用心的人可以分析存放在本地的cookie并进行cookie欺骗,所以它是"不安全"的
 
  * "Session存储在服务器上,不存在敏感信息泄漏的风险"
                     
5.存储时间不同
  *  Cookie默认浏览器关闭
  
  *  Session 默认30分钟
 
  * 开发可以通过设置cookie的属性,达到使cookie长期有效的效果。
 
  * session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,
  只需关闭窗口该session就会失效,因而session不能达到长期有效的效果
 
6.服务器压力不同
  
  * Cookie保管在客户端,"不占用服务器资源", "对于并发用户十分多的网站,cookie是很好的选择"(Cookie不占用服务器资源)
  * session是保管在服务器端的,每个用户都会产生一个session, 假如并发访问的用户十分多,会产生十分多的session,耗费大量的内存(Session 占用服务器资源)
                     
7.键值对数量不同
  * Cookie 存一个键和一个值
  
  * Session 存n个键和值
/*

Cookie 和 Session 都是来完成一次会话内多次请求间数据共享的

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熬夜加班写bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值