会员登陆  支付方式  联系我们  在线客服  网站地图       
首页 关于域浪 互联网数据中心业务、主机托管、主机租用、机架租用、带宽租用、机房介绍、机房对比、CCN网络加速 adsl专线、深圳adsl专线 虚拟主机、域名注册、数据库、企业邮局、动态域名 网络安全、网络临近平台、安全服务、防火去墙租用、安全产品、域浪抗DDOS防火墙、NetScreen防火墙 技术支持  
   当前位置:首页 >> 技术支持 >> JAVASCRIPT编程技巧 >> 初学Javascript之cookie篇(译)
 
精华文章
    JavaScript 实用的一些...  
    用 JavaScript 事件在...  
    JavaScript 事件串联执...  
    Java编程基础  
    Javascript事件驱动  
    Javascript事件设计模...  
    JS的事件处理  
    JS的对象及其属性和方...  
    .JS的语句及语法  
    JS的数据类型和变量  
    JS的运行环境  
    JS与Java的区别  
    JS简介及特点  
    JavaScript引用对象的...  
    JavaScript常用内部对...  
    JavaScript 是什麽  
    在JavaScript中创建新...  
    JavaScript对象系统的...  
    JavaScript从入门到精...  
     JavaScript从入门到...  
    JavaScript事件驱动及...  
    Java网络编程  
    JavaScript[对象.属性...  
    JavaScript[对象.属性...  
    JavaScript[对象.属性...  
    用JavaScript实现浏览...  
    PHP与JavaScript对多项...  
    用JavaScrpt实现文件夹...  
  更多>>  
   JAVASCRIPT编程技巧
 初学Javascript之cookie篇(译)
简介



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



  问题是我想解决自动访问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>

  • 上一篇文章: 用JavaScrpt实现文件夹轻松加密
  • 下一篇文章: JavaScript对象与数组参考大全
  • 域浪网络ISP经营许可证 深圳地址:深圳市罗湖区宝安北路国际商品交易大厦七楼C30室
    Tel:0755-82266883/82267566 Fax:0755-82261966
    邮编:518000 
                        Copyright © 2006-2008 elang.cn All Rights Reserved 深圳市域浪网络技术有限公司版权所有