关闭

Java之cookie和session

发表于:2010-3-18 10:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

#
java

  一、cookie机制和session机制的区别

  *************************************************************************************

  具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

  同时我们也看到,由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session

  机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择

  二、会话cookie和持久cookie的区别

  *************************************************************************************

  如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。

  如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。

  存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

  三、如何利用实现自动登录

  *************************************************************************************

  当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。客户后来重新连接时,这个

  用户ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户务需给出明确的用户名和密码,就可以访问服务器上的资源。

  四、如何根据用户的爱好定制站点

  *************************************************************************************

  网站可以使用cookie记录用户的意愿。对于简单的设置,网站可以直接将页面的设置存储在cookie中完成定制。然而对于更复杂的定制,网站只需仅将一个惟一的标识符发送给用户,由服务器端的数据库存储每个标识符对应的页面设置。

  五、cookie的发送

  *************************************************************************************

  1.创建Cookie对象

  2.设置最大时效

  3.将Cookie放入到HTTP响应报头

  如果你创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie:存储在浏览器的内存中,用户退出浏览器之后被删除。如果你希望浏览器将该cookie存储在磁盘上,则

  需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。

  发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个Set-Cookie HTTP请求报头中。由于这个方法并不修改任何之前指定的Set-Cookie报头,而是创建新的报头,因此我们将这个方法称为是addCookie,而非setCookie。同样要记住响应报头必须在任何文档内容发送到客户端之前设置。

  六、cookie的读取

  *************************************************************************************

  1.调用request.getCookie

  要获取有浏览器发送来的cookie,需要调用HttpServletRequest的getCookies方法,这个调用返回Cookie对象的数组,对应由HTTP请求中Cookie报头输入的值。

  2.对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止

  cookie与你的主机(域)相关,而非你的servlet或JSP页面。因而,尽管你的servlet可能只发送了单个cookie,你也可能会得到许多不相关的cookie。

  例如:

String cookieName = “userID”;
Cookie cookies[] = request.getCookies();
if (cookies!=null){
  for(int i=0;i<cookies.length;i++){
      Cookie cookie = cookies[i];
    if (cookieName.equals(cookie.getName())){
      doSomethingWith(cookie.getValue());
    }
  }
}

41/41234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号