当前位置: 首页 > 图文教程 > 网络编程 > Javascript > 初学Javascript之cookie篇(译)

Javascript
IE bug table元素的innerHTML
Javascript学习笔记1 数据类型
Javascript学习笔记2 函数
Javascript学习笔记3 作用域
Javascript学习笔记4 Eval函数
Javascript学习笔记5 类和对象
Javascript学习笔记6 prototype的提出
Javascript学习笔记7 原型链的原理
Javascript学习笔记8 用JSON做原型
Javascript学习笔记9 prototype封装继承
Javascript 读书笔记索引贴
JavaScript 事件冒泡应用实例分析
JavaScript 事件冒泡简介及应用
Extjs学习笔记之九 数据模型(上)
javascript Object与Function使用
取选中的radio的值
JavaScript 学习笔记(九)call和apply方法
javascript下判断一个对象是否具有指定名称的属性的的代码
Javascript 实现TreeView CheckBox全选效果
jquery插件 cluetip 关键词注释

初学Javascript之cookie篇(译)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-10   浏览: 96 ::
收藏到网摘: n/a

  [译者注:将本文的最后示例代码拷贝至文本文件中,更名文件为homepage.htm格式文件,在浏览器中运行,本文以该示例代码讲解]

  简介

  ====================================

  问题是我想解决自动访问http://www.thehungersite.com。这个页面能够限制你每一天只访问它一次(不要忘记在这链接上点击)。
  现在为止,每次一开始我做的第一件事就是手工选择我的书签加载这个页面。

  为什么不为它创建一个简单的脚本程序呢?
  因为我想让它在Netscape和IE下都能够同样的工作,我开始学习Javascript。

  解决

  ====================================

  主题思想很简单:创建一个页面并测试一下今天这个页面是否已被加载过,
  如果没有加载,那就通过它链接到http://www.thehungersite.com,并且设置
  这个页面作为浏览器的主页。

  获取页面并重定向是很容易的,问题是如何记忆这个页面已被访问过。

  因为Javascript没有文件访问的功能,看来我们只能使用cookies了。

  Cookies是一个有大小限制的变量,它与一个服务器的域名相关联,
  默认情况下cookie的生存期是当浏览器关闭时被清空(注意:不是当你离开
  这个页面的时候),但可以用一个脚本程序改变这种情况,
  在用户关闭浏览器后使cookies能够存储下来,Netscape在文件中使用所有的
  Cookie,而IE分别存储每个cookie。此外,不同的浏览器会带来一些意想
  不到的情况,你必须确定一个用户在它的浏览器设置中是否关闭了cookies。

  一切都很好也很妙,只是现在我还未在IE中测试它,调用示例Javascript语句:
  cookieExpires = "01-APR-" + nLyear + " GMT";
  document.cookies = cookieName + "=" + cookieValue + ";  expires=" + cookieExpires;

  然后调用
  document.write(document.cookie);

  document.cookie是空的。

  ------------------------------------------

  在试验和研究了一下上面的示例程序后,会发现:

  1。你不能够读和显示cookie。如果你想看一下这个cookie你需要指定与它相同的另一个字符串变量,如下:
   document.cookie = cookieName + "=" + cookieValue + "; expires=" + cookieExpires;
   myvar = cookieName + "=" + cookieValue + "; expires=" + cookieExpires;
   document.write(myvar);

  2. 浏览器用了不同的日期格式:
    Netscape使用"GMT"结束,IE使用“UTC",这是因为它可以更好的构建一个日期,象下面这样:
      var expdate = new Date()
   cookieExpires.setTime (expdate.getTime() + 1 * (24 * 60 * 60 * 1000)) //+1 day
   cookieExpires.toGMTString()

   当你显示日期部分
   document.write(expdate.getYear() + "<br>" + expdate.getMonth() + "<br>" + expdate.getDate());
   对于2000-11-15的日期,在IE中显示为2000/10/15,在Netscape下显示100/10/15(注:已确定是一些较低版本的
   Netscape 浏览器的Y2K问题)

   示例中看到像下面这样的部分:
   if (platform == "Mac") {
   lastVisit = lastVisit - (24 * 60 * 60 * 1000)
   }
   但我不可能检测它。

  日期对象有getDate和getDay的方法,第二个方法返回在一周中天的索引号。

----------------------------------------
  知道了这些,基本上就没问题了(现在你可以看一下homepage.htm)

[译者注:将本文的最后示例代码拷至文本文件中并保存htm格式,然后运行]

  最后要说明的是,这不仅是一个专用的JS脚本,如果你想将它用在你的web页面上你必须最小程度的使用不同的浏览器测试它并注意它们的版本,许多的脚本程序包含了浏览器类型检测和大量的if...else语句,以处理这样不同。

  示例页面homepage.htm源代码

  =======================================

  <html>
  <head>
  <title>Homepage</title>
  </head>
  <body>
  <a href='http://www.thehungersite.com/'>Manual redirection<br></a>
  <a href="javascript:ResetCookie()">Cookie reset</a>

  <script language="JavaScript">
  <!--
  var bVisitedToday = false;

  var lastVisit = GetCookie("lastVisit");
  if (lastVisit != null)
  {
  lastVisit = 1 * lastVisit;
  var lastHere = new Date(lastVisit); 
  var rightNow = new Date();

  if(lastHere.getYear() == rightNow.getYear()
     && lastHere.getMonth() == rightNow.getMonth()
     && lastHere.getDate() == rightNow.getDate())
  {
     bVisitedToday = true;
    }
  }

  if(bVisitedToday == false)
  {
  setLastlastVisitCookie();
  window.location="http://www.thehungersite.com/"
  }
  else
  {
  //window.location="about:blank"
  }

  function getCookieVal (offset)
  {
  var endstr = document.cookie.indexOf (";", offset);
  if (endstr == -1)
    endstr = document.cookie.length;
  return unescape(document.cookie.substring(offset, endstr));
  }
  function GetCookie (name)

  {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while (i < clen) {
    var j = i + alen;
    if (document.cookie.substring(i, j) == arg)
      return getCookieVal (j);
    i = document.cookie.indexOf(" ", i) + 1;
    if (i == 0) break;
  }
  return null;
  }
  function SetCookie (name, value)
  {
  var argv = SetCookie.arguments;
  var argc = SetCookie.arguments.length;
  var expires = (argc > 2) ? argv[2] : null;
  var path = (argc > 3) ? argv[3] : null;
  var domain = (argc > 4) ? argv[4] : null;
  var secure = (argc > 5) ? argv[5] : false;
  document.cookie = name + "=" + escape (value) +
    ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
    ((path == null) ? "" : ("; path=" + path)) +
    ((domain == null) ? "" : ("; domain=" + domain)) +
    ((secure == true) ? "; secure" : "");
  }
  function setLastlastVisitCookie ()
  {
  var rightNow = new Date();
  var expdate = new Date();
  expdate.setTime (expdate.getTime() + 1 * (24 * 60 * 60 * 1000)); //+1 day
  SetCookie ("lastVisit", rightNow.getTime(), expdate, "/");
  }
  function ResetCookie()
  {
    SetCookie("lastVisit", 0, null, "/");
  }
  // -->
  </script>
  </body>
  </html>