cookie详解以及cookie的使用

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

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。
同时我们也看到,由于服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要
借助于cookie机制来达到保存标识的目的,但实际上还有其他选择,比如说重写 URL和隐藏表单域。

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

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

如果设置了过期时间(setMaxAge(606024)),浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,
这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比
如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。(在IE下测试通过)

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

当用户在某个网站注册后,就会收到一个唯一用户ID的cookie。客户后来重新连接时,这个用户ID会自动返回,
服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户务需给出明确的用户名和密码,
就可以访问服务器上的资源。

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

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

五、cookie的发送

1.创建Cookie对象
2.设置最大时效
3.将Cookie放入到HTTP响应消息头

如果你创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie:存储在浏览器的内存
中(服务器自动创建一个cookie并将jsessionId作为key,sessionId的值作为value发送到客户端浏览器内存中),
用户退出浏览器之后被删除。如果你希望浏览器将该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消息头输入的值。

  1. 对数组进行循环,调用每个cookie的getName方法,直到找到感兴趣的cookie为止,cookie与你的主机(域)相关,
    而非你的 servlet或JSP页面。因而,尽管你的servlet可能只发送了单个cookie,你也可能会得到许多不相关的cookie。

例如:(login.jsp页面cookie实现用户名userName填写)
login.jsp:

<%
String username = “”;
//从客户端读取硬盘中的cookie文件
Cookie[] cookies = request.getCookies();
if(cookies == null){
username = “”;
}
else{
for (int i = 0; i < cookies.length; i++){
if (“USERNAME”.equalsIgnoreCase(cookies[i].getName())){
username = cookies[i].getValue();
}
}
%>

用户名

密 码

LoginAction:
//将正确userName放入c1对象,并用"USERNAME"做key标识
Cookie c1= new Cookie(“USERNAME”,logindto.getUsername());
//如果不设置时间,则cookie为会话cookie,不写入客户端硬盘
c1.setMaxAge(606024);
response.addCookie(c1);

七、如何使用cookie检测初访者

A.调用HttpServletRequest.getCookies()获取Cookie数组
B.在循环中检索指定名字的cookie是否存在以及对应的值是否正确
C.如果是则退出循环并设置区别标识
D.根据区别标识判断用户是否为初访者从而进行不同的操作

八、使用cookie检测初访者的常见错误

不能仅仅因为cookie数组中不存在在特定的数据项就认为用户是个初访者。如果cookie数组为null,客户
可能是一个初访者,也可能是由于用户将 cookie删除或禁用造成的结果。但是,如果数组非null,也不过
是显示客户曾经到过你的网站或域,并不能说明他们曾经访问过你的servlet。其它servlet、JSP页面以及
非Java Web应用都可以设置cookie,依据路径的设置,其中的任何cookie都有可能返回给用户的浏览器。

正确的做法是判断cookie数组是否为空且是否存在指定的Cookie对象且值正确。

九、使用cookie属性的注意问题

属性是从服务器发送到浏览器的消息头的一部分;但它们不属于由浏览器返回给服务器的消息头。

因此除了名称和值之外,cookie属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的
cookie并没有设置这些属性。因而不要期望通过request.getCookies得到的cookie中可以使用这个属性。这
意味着,你不能仅仅通过设置cookie的最大时效,发出它,在随后的输入数组中查找适当的cookie,读取它的
值,修改它并将它存Cookie,从而实现不断改变的cookie值。

十、如何使用cookie记录各个用户的访问计数

1.获取cookie数组中专门用于统计用户访问次数的cookie的值
2.将值转换成int型
3.将值加1并用原来的名称重新创建一个Cookie对象
4.重新设置最大时效
5.将新的cookie输出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值