Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29956981
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2008-12-02 15:02:02

研究一下:如何实现解决FF的关闭浏览器就自动清空掉cookie值吧!
一、用户登录时,只有当前页Cookies有效,如果是新开一个窗口Cookies无效,要重新登录才行。  
二、我关闭浏览器时(点右上角直接关闭)Cookies直接失效。    
  因为虽然cookie是在客户端,但是确分为两种情况: 
  1。硬盘cookie,是指在你设置了cookie的Expires属性,此时cookie将保存到你的硬盘上,一般是document/cookie下面。此时所有的窗口将共享同一个名字的cookie。 
  2。内存cookie,是指没有设在cookie的Expires的属性,此时cookie将停留在客户端的内存中,只有在该IE窗口中从“文件-新建- 窗口”打开的新的IE窗和由form的target属性为_blank产生的新的IE窗口才共享同一个cookie信息。  
response.cookies("cookiename").expires中expires的属性如下:
response.cookies("cookiename").expires=-1 表示网页显示之后过期
response.cookies("cookiename").expires=0 立即过期
response.cookies("cookiename").expires=data +10   当前时间+10天数 表示在10天以后过期了.
response.cookies("cookiename").expires=10  表示10分钟后过期..
单独表示是以分钟来做单位的,session的单位也是的,但是和date + 10 就不一样了 ,因为date是日期,日期的单位是天,10当然就变成天了。
以上就是设置过期时间的,但是单位是“天”,就是说这个cookie过一天才会无效,如果想让它在半小时或更短的时间就无效要怎么做呢?
response.cookie("cookiename").expires=dateadd("n",30,now()) 
  "n"单位为“分钟” 
  或者 
  response.cookie("cookiename").expires=dateadd("s",1800,now()) 
  "s"单位为“秒” 



一个简单的例子
1. 写入Cookie --- writecookie.jsp
-------------------------------------------------------------
<%@ page contentType="text/html; charset=ISO8859_1" %>
<%
  Cookie _cookie=new Cookie("user_delfancom", "delfan");
  _cookie.setMaxAge(30*60); // 设置Cookie的存活时间为30分钟
  response.addCookie(_cookie); // 写入客户端硬盘
  out.print("写Cookie完成");
%>
2. 读取Cookie.jsp --- readcookie.jsp
-------------------------------------------------------------
<%
  Cookie cookies[]=request.getCookies(); // 将适用目录下所有Cookie读入并存入cookies数组中
  Cookie sCookie=null; 
  String sname=null;
  String name=null;
  if(cookies==null) // 如果没有任何cookie 得加上的哦!
    out.print("none any cookie");
  else
  {
    out.print(cookies.length + "
");
    for(int i=0;i     {
      sCookie=cookies[i];
      sname=sCookie.getName();
      name = sCookie.getValue();
      out.println(sname + "->" + name + "
");
    }
  } 
%>

需要注意的两个问题:
1. Cookie有个适用路径的问题, 就是说如果 writecookie.jsp和readcookie.jsp要放在同意目录下, 如果不在同一目录下, 则写的时候需要设置路径,为readcookie.jsp所在的路径.
2. 读入Cookie数组的时候需要判断是否为空(null), 网上很多代码都没有写出这一点.
[哈哈!]
设置Cookie的存在时间,及删除Cookie 在JSP中,使用setMaxAge(int expiry)方法来设置Cookie的存在时间,参数expiry应是一个整数。正值表示cookie将在这么多秒以后失效。 注意这个值是cookie将要存在的最大时间,而不是cookie现在的存在时间。 负值表示当浏览器关闭时,Cookie将会被删除。零值则是要删除该Cookie。 如:   

处理Cookie的属性

  看到这里,有的朋友又要问了:我光知道如何创建Cookie有什么用呀?是呀,光知道如何创 建Cookie而不知道怎么使用是不够的。在JSP中,程序是通过cookie.setXXX设置各种属性,用cookie.getXXX读出 cookie的属性,现把Cookie的主要属性,及其方法列于下,供大家参考:

类型 方法名 方法解释
String getComment() 返回cookie中注释,如果没有注释的话将返回空值.
String  getDomain() 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com) 
int  getMaxAge()  返回Cookie过期之前的最大时间,以秒计算。 
String getName()  返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。 
String getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。
boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。
String  getValue() 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。 
int getVersion()  返回Cookie所遵从的协议版本。 
void setComment(String purpose) 设置cookie中注释。
void setDomain(String pattern) 设置cookie中Cookie适用的域名
void setMaxAge(int expiry)  以秒计算,设置Cookie过期时间。
void setPath(String uri) 指定Cookie适用的路径。 
void  setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。 
void setValue(String newValue) cookie创建后设置一个新的值。 
void setVersion(int v) 设置Cookie所遵从的协议版本。    

1.测试一下自己用JSP来写一个cookie吧!
然后来测试一下是否能够做到浏览器关闭的时候就自动清空掉
代码如下:

1.写一个创建cookie 的方法
<%!    Cookie createCookie(String value){
            Cookie cookie=new Cookie("sjhkebao",value);
            cookie.setMaxAge(-1);
            return cookie;
 } %>
 <% response.addCookie(createCookie("cookie"));    %>
2.写一个读取cookie值的一个方法吧!

 
阅读(996) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~