JSP的内置对象3

Cookie对象

  • cookie是在本地进行数据存储的对象,访问速度快,效率高但是不安全
<%
	 //将name存储到Cookie中
  Cookie nameCookie = new Cookie("name",name);
	//将创建的cookie存储到响应头中
  response.addCookie(nameCookie);
%>
<%
  //获取cookie
  Cookie[] cookies = request.getCookies();
  for(Cookie cook : cookies){
    String val = cook.getValue();
    out.println(cook.getName()+":"+val+"<br/>");
  }
%>

Cookie生效时间

  1. 值为正数,代表了cookie的存活时长(秒为单位)
  2. 值为0时,代表了立即清除cookie
  3. 值为负数时,代表了cookie的生命周期与当前会话一致
<%
	Cookie nameCookie = new Cookie("name",name);
  //设置cookie的生效时间setMaxAge() 秒
  nameCookie.setMaxAge(10);
  response.addCookie(nameCookie);
%>
<%
//获取cookie
Cookie[] cookies = request.getCookies();
if(cookies != null){
  for(Cookie cook : cookies){
    String val = cook.getValue();
    //设置cookie立马失效
    cook.setMaxAge(0);
    //更新response中的cookie对象
    response.addCookie(cook);
    //对获取到的数据进行解码
    //val = URLDecoder.decode(val,"utf-8");
    out.println(cook.getName()+":"+val+"<br/>");
  }
}
%>

Cookie针对不同的浏览器可以存储的数量是有限的

  • 一.浏览器允许每个域名所包含的cookie个数是有限的
  • Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie。

Firefox每个域名cookie限制为50个。

Opera每个域名cookie限制为30个。

Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。

注:“每个域名cookie限制为20个”将不再正确!

  • 二、当很多的cookie被设置,浏览器如何去响应。

除Safari(可以设置全部cookie,不管数量多少),有两个方法:

最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。Internet Explorer和Opera使用此方法。

Firefox很独特:虽然最后的设置的Cookie始终保留,但似乎随机决定哪些cookie被保留。似乎没有任何计划(建议:在Firefox中不要超过Cookie限制)。

三、不同浏览器间cookie总大小也不同:

Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。

Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。

Internet Explorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。

注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。

Session与Cookie的区别

  1. session是存储服务端的,Cookie是存储在客户端的
  2. session数据安全,Cookie数据不安全
  3. session效率低,Cookie效率高

Application对象

  • application是全局作用域对象,也称为web上下文对象,通常用于存储一些全局参数
    |方法名| 描述 |
    |–|--|
    | setAttribute(key,val) | 设置全局参数 |
    | getAttribute(key) | 获取全局参数 |

案例:统计文章的浏览次数

<%
	//设置默认的阅读量
    int count = 0;
    //1.先从全局作用域中获取存储的已访问的数量
    Object object = application.getAttribute("count");
    if(object != null){
        count = (Integer)object;
    }
    //2.在已有的阅读量的基础上+1
    count++;
    //3.将最新的阅读量存储到全局作用域中(更新)
    application.setAttribute("count",count);
%>
阅读量:<%=count%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值