会话控制Cookie和Session还有他们之间的区别

    Cookie

 简介:

      服务器保存在浏览器上的一段信息,主要用于区分不同的(浏览器)用户。

 工作原理:

  •     浏览器发送请求
  •     服务器创建Cookie对象,该对象会携带用户信息,服务器将Cookie对象响应给浏览器
  •    以后浏览器每次请求服务器时都会携带该Cookie对象,
  •    服务器会根据不同的Cookie区分不同的浏览器端。                     

 Cookie的创建、获取、修改:

   创建:

 Cookie cookie = new Cookie(String name,String value); 
 response.setCookie(cookie);

    获取:

Cookie[] cookies = request.getCookies();
	for (Cookie cookie : cookies) {
	    System.out.println(cookie.getName()+": "+cookie.getValue());
	}

    修改:创建个新的就好,不用修改

Cookie的有效性问题:

            有效时间问题:

                               1.默认有效时间为当前会话,即当前浏览器的打开,直到关闭为当前会话

                                2.持久化Cookie:setMaxAge(long m)   m=0:立即失效(Cookie响应之后立即失效)m>0 指定时间失效 m<0默认当前会话。

          路径有效问题: 即某些Cookie只有在指定的路径下才可以有效

                                1.默认是当前WEB应用下   

                                2.设置Cookie有效路径:setPath()

  注意:一般设置Cookie的有效路径,均为当前项目下的某路径:cookie.setPath(request.getContextPath()+"/cookie_path.jsp");
  

  Cookie缺陷

                    Cookie存放到浏览器中,相对不安全。
                    Cookie的value是String类型,相对不灵活。
                    Cookie过多,会浪费流量。
                    不同浏览器厂商,对Cookie数量有限制。            

Session

      Session是什么:

                    1.JSP的九大内置对象

                    2.session是一个域对象

                     3.session是一种在服务器端用来保存用户数据的一种技术 ,并且Session会话技术是基于Cookie来实现的。

 所以它默认的作用于也是会话级别

工作原理:

     1.第一次请求时:

       浏览器发送请求

                   服务器创建Session对象 ,同时创建特殊的Cookie对象名称(name)为JSESSIONID 值(value)为session.getId(),并将Cookie对象返回个浏览器。

                   以后每次浏览器请求都会携带Cookie对象。

                   浏览器通过Cookie对象的JSESSIONID的value值获取Session对象,通过Session对象区分不同的用户

    2.浏览器之后发送的请求:

           不论Cookie不存在还是Session存不存在,都需要重新创建Session对象,然后再创建Cookie对象

           若都存在通过cookie对象中的JSESSIONID获取value值找到Session对象,通过Session对象区别用户

Session的有效时间:

1.默认有效时间:30分钟
                          tomcat->web.xml->
                             <session-config>
                                <session-timeout>30</session-timeout>
                            </session-config>
                     手动设置有效时间
                          全局(单位:分钟)
                             当前web应用中的web.xml
                                  <session-config>
                                    <session-timeout>30</session-timeout>
                                </session-config>
                          局部 (单位:秒)
                            session.setMaxInactiveInterval(ss):设置当前session的最大非活动(空闲)时间,从最后一次访问开始计时。
                                  ss>0:在指定时间内,没有访问session,session失效。
                                  ss<=0:session永不失效
                          设置session失效
                              invalidate()

 

Session对象的释放:

                    - Session对象空闲时间达到了目标设置的最大值,自动释放
                    - Session对象被强制失效
                    - Web应用卸载
                    - 服务器进程停止

 

区别:

Cookie 是 web 服务器发送给浏览器的一块信息,浏览器会在本地一个文件中给每个 web 服务器存储 cookie。以后浏览器再给特定的 web 服务器发送请求时,同时会发送所有为该服务器存储的 cookie。
Session 是存储在 web 服务器端的一块信息。session 对象存储特定用户会话所需的属性及配置信息。当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
Cookie 和session 的不同点:
1、无论客户端做怎样的设置,session 都能够正常工作。当客户端禁用 cookie 时将无法使用 cookie。
2、在存储的数据量方面:session 能够存储任意的java 对象,cookie 只能存储 String 类型的对象。

Cookie过期:
Cookie由浏览器管理,如果Cookie有过期时间,浏览器会在过期时间将其销毁。如果没有设置过期时间浏览器关闭后Cookie会过期
Session超时:
Session对象由服务器管理,服务器会计算Session对象的不活动时间,如果Session对象设置了超时时间,Session对象超过此时间会被销毁。如果没有设置默认30分钟会被销毁(服务器默认配置)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值