js中cookie的增删改查问题

在网上查了些资料,写了下面一个例子,一起分享。
但还有个问题为解决:
按照下面的写法,能够IE6,firefox浏览器中都能正常增,删,改,查。但如果
document.cookie = cookieName+'='+getCookies(cookieName)+";expires="+(new Date(0)).toUTCString()+';path=/';中加上 domain,secure 删除貌似不成功。(譬如:写成这样 cookieName+'='+getCookies(cookieName)+";expires="+(new Date(0)).toUTCString()+';path=/'+';domain='+';secure'; 请知道其中奥秘的朋友,给我解答,可以直接跟贴,不胜感激
expires='+date.toUTCString()+';path=/';后面加上
<%@ page contentType="text/html; charset=gb2312"%>
<%@ page import="java.io.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="java.util.*"%>
<HTML>
 <HEAD>
  <TITLE>测试页</TITLE>
  <script type="text/javascript">
  
 // 添加cookie信息
 function saveCookies() {
  
  var cookieKey = document.getElementById('cookieKey');
  var cookieValue = document.getElementById('cookieValue');  
  if(!navigator.cookieEnabled){//浏览器是否支持cookie  
   alert('不Cookie项!'); 
  }else if(isBlankCheck(cookieKey.value)){//cookie的key为空
   alert('请输入key');
   cookieKey.focus();
  }else if(isBlankCheck(cookieValue.value)){//cookie的value为空
   alert('请输入value');
   cookieValue.focus();
  }else{//设置cookie
   
   var date=new Date();
   
   //设置过期时间 (3分钟)
   date.setTime(date.getTime()+3*60000);  
   document.cookie=escape(cookieKey.value)+'='+escape(cookieValue.value)+';expires='+date.toUTCString()+';path=/';
  }
 }
 // 获得指定cookie信息
 function getCookies(cookie_name) {
  var retValue='';
  var allcookies = document.cookie;
  var cookie_pos = allcookies.indexOf(cookie_name);
  // 如果找到了索引,就代表cookie存在,  
  // 反之,就说明不存在。  
  if (cookie_pos != -1)
  {
   // 把cookie_pos放在值的开始,只要给值加1即可。  
   cookie_pos += cookie_name.length + 1;
   var cookie_end = allcookies.indexOf(";", cookie_pos);
   if (cookie_end == -1)
   {
    cookie_end = allcookies.length;
   }
   retValue = unescape(allcookies.substring(cookie_pos, cookie_end));
  }
  return retValue;
 }
 
 //获得所有的cookie  
 function getAllCookies(){
   
  return document.cookie;
 }
 
 //删除cookie信息
 function deleteCookies() {
  var delCookieNameObj = document.getElementById('delCookieName');
  var delCookieName = delCookieNameObj.value;
  if(!navigator.cookieEnabled){//浏览器是否支持cookie  
   alert('不Cookie项!'); 
  }else if(isBlankCheck(delCookieName)){//cookie的key为空
   alert('请输入key');
   delCookieNameObj.focus();
  }else if(isBlankCheck(getCookies(delCookieName))){
   alert('该cookie不存在或已删除,请查询确认');
  }else{//删除cookie
   
   var date = new Date();
   
   //删除一个cookie,就是将其过期时间设定为一个过去的时间
   date.setTime(date.getTime() - 4*60000);
   
   //document.cookie='userName='+';expires='+date.toGMTString()+';path=/'+';domain='+';secure';
   //document.cookie="userName" + "=;expires=Thu, 01-Jan-1970 00:00:01 GMT";
   document.cookie = delCookieName+'='+getCookies(delCookieName)+';expires='+(new Date(0)).toUTCString()+';path=/';
   showAllCookies();
  }
 }
  // 设置cookie过期
 function makeCookiesExpired() {
  alert('3分钟后,cookie过期,再点击【显示所有Cookie】查看');
 }
 //显示指定cookie信息
 function showOneCookie(cookieName){
  
  var displayCookieNameObj = document.getElementById(cookieName);
  var displayCookieName = displayCookieNameObj.value;
  
  if(!navigator.cookieEnabled){//浏览器是否支持cookie  
   alert('不Cookie项!'); 
  }else if(isBlankCheck(displayCookieName)){//cookie的key为空
   alert('请输入key');
   displayCookieNameObj.focus();
  }else if(isBlankCheck(getCookies(displayCookieName))){
   alert('该cookie不存在或已删除,请查询确认');
  }else{
   document.getElementById("cookieResult").innerHTML="<span><font color=red>"+getCookies(displayCookieName)+"</font></span>" 
  }
 }
 //显示所有cookie信息
 function showAllCookies(){
  document.getElementById("cookieResult").innerHTML="<span><font color=red>"+getAllCookies()+"</font></span>"
 }
 
 //空字符串判断(为空:true/不为空:false)
 function isBlankCheck(value){
  
  var ret = true;
  
  if(trim(value)!=''){
   ret = false;
  }
  return ret;
 }
 //删除左右两端的空格
   function trim(str){
       return str.replace(/(^/s*)|(/s*$)/g, "");
   }
 //删除左边的空格
   function ltrim(str){
       return str.replace(/(^/s*)/g,"");
   }
 //删除右边的空格
   function rtrim(str){
       return str.replace(/(/s*$)/g,"");
   }  
</script>
 </HEAD>
 <body>
 <a href="index.html">返回主页面</a><br/>
  说明:
  <ol>
   <li>
    输入cookie的key和Value,可以保存cookie
   </li>
   <li>
    显示所有Cookie,可以查看所有cookie
   </li>
   <li>
    输入cookie的key,即可查看当前cookie值
   </li>
   <li>
    输入cookie的key,即可删除该cookie
   </li>
  </ol>
  <form id="form1" name="form1" method="post" action="#">
   <input type="button" name="Submit" value="显示所有Cookie"
    οnclick="showAllCookies()" />
   <input type="button" name="Submit2" value="Cookie过期"
    οnclick="makeCookiesExpired()" /><br/>
   输入Key:
   <input type="text" name="cookieKey" /><br/>
   输入value:
   <input type="text" name="cookieValue" />
   <input type="button" name="cookieEnabled" value="保存Cookie"
    οnclick="saveCookies()" /><br/>
   输入查看key:
   <input type="text" name="displayCookieName" />
   <input type="button" name="Submit1" value="显示指定Cookie"
    οnclick="showOneCookie('displayCookieName');" />
   <br />
   输入删除key:
   <input type="text" name="delCookieName" />
   <label>
    <input type="button" name="Submit3" value="删除Cookie"
     οnclick="deleteCookies()" />
   </label>
   <br />
  </form>
  <hr />
  <div id="cookieResult">
   <font color="green">显示Cookie信息区域</font>
  </div>
 </body>
</HTML>
 
说明:

在Javascript脚本里,一个cookie 实际就是一个字符串属性。当你读取cookie的值时,就得到一个字符串,里面当前WEB页使用的所有cookies的名称和值。每个cookie除了 name名称和value值这两个属性以外,还有四个属性。这些属性是: expires过期时间、 path路径、 domain域、以及 secure安全

Expires – 过期时间。指定cookie的生命期。具体是值是过期日期。如果想让cookie的存在期限超过当前浏览器会话时间,就必须使用这个属性。当过了到期日期时,浏览器就可以删除cookie文件,没有任何影响。

Path – 路径。指定与cookie关联的WEB页。值可以是一个目录,或者是一个路径。如果 http://www.jzxue.com/html/java/ 建立了一个cookie,那么在 http://www.jzxue.com/html/java/ 目录里的所有页面,以及该目录下面任何子目录里的页面都可以访问这个cookie。这就是说,在 http://www.jzxue.com/html/java/stories/articles 里的任何页面都可以访问 http://www.jzxue.com/html/java/index.html 建立的cookie。但是,如果 http://www.jzxue.com/html/asp/ 需要访问 http://www.jzxue.com/html/java/index.html 设置的cookes,该怎么办?这时,我们要把cookies 的path属性设置成“/”。在指定路径的时候,凡是来自同一服务器,URL里有相同路径的所有WEB页面都可以共享cookies。现在看另一个例子:如果想让 http://www.jzxue.com/devhead/filters/ http://www.jzxue.com/devhead/stories/ 共享cookies,就要把path设成“/devhead”。

Domain – 域。指定关联的WEB服务器或域。值是域名,比如jzxue.com。这是对path路径属性的一个延伸。如果我们想让 catalog.mycompany.com 能够访问shoppingcart.mycompany.com设置的cookies,该怎么办? 我们可以把domain属性设置成“mycompany.com”,并把path属性设置成“/”。FYI:不能把cookies域属性设置成与设置它的服务器的所在域不同的值 。(上面不成功原因

Secure – 安全。指定cookie的值通过网络如何在用户和WEB服务器之间传递。这个属性的值或者是“secure”,或者为空。缺省情况下,该属性为空,也就是使用不安全的HTTP连接传递数据。如果一个 cookie 标记为secure,那么,它与WEB服务器之间就通过HTTPS或者其它安全协议传递数据。不过,设置了secure属性不代表其他人不能看到你机器本地保存的cookie。换句话说,把cookie设置为secure,只保证cookie与WEB服务器之间的数据传输过程加密,而保存在本地的 cookie文件并不加密。如果想让本地cookie也加密,得自己加密数据。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 JavaScript 来说,可以使用以下方法来进行 cookie增删改查操作: 1. 增加/设置 cookie: ```javascript document.cookie = "key=value; expires=date; path=path; domain=domain; secure"; ``` 这里的 `key` 是要设置的 cookie 名称,`value` 是要设置的 cookie 。可选的参数有: - `expires`:cookie 的过期时间,可以使用 `Date` 对象来设置,如果不设置则默认为当前会话结束时过期。 - `path`:cookie 的路径限制,默认为当前页面路径。 - `domain`:cookie 的域名限制,默认为当前页面域名。 - `secure`:布尔,表示 cookie 是否只能通过 HTTPS 连接传输。 2. 获取 cookie: ```javascript var cookies = document.cookie; ``` 这样可以获取到当前页面所有的 cookie,返回的是一个字符串,形如 "key1=value1; key2=value2; ..."。 3. 删除 cookie: ```javascript document.cookie = "key=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=path; domain=domain; secure"; ``` 这里的 `key` 是要删除的 cookie 名称,通过将其过期时间设置为一个过去的时间来删除。其他参数需与设置 cookie 时一致。 4. 修改/更新 cookie: 由于 cookie 的特性,JavaScript 并没有提供直接修改/更新 cookie 的方法。如果想要修改某个 cookie,可以先删除原有的 cookie,然后重新设置一个新的 cookie。 需要注意的是,cookie 存储的数据量是有限制的,通常为 4KB 左右。同时,由于 cookie 是存储在客户端的,所以在安全性方面需要注意,敏感信息应该避免存储在 cookie
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值