用户注销java代码 jsp注销用户( 二 )


*************************************************************************************
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;icookies.length;i++){
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName())){
doSomethingWith(cookie.getValue());
}
}
}
*************************************************************************************
七、如何使用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值 。

推荐阅读