初学Javascript之cookie篇(译)

转载 2004年07月01日 09:37:00
CSDN - 文档中心 - Javascript    
标题     初学Javascript之cookie篇(译)    yjgx007(翻译)
关键字     cookie 示例 源代码
出处     http://www.codeproject.com/jscript/cookies_intro.asp

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处http://xinyistudio.vicp.net/和作者信息及本声明

[译者注:将本文的最后示例代码拷贝至文本文件中,更名文件为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>

JavaScript学习篇之——初始JavaScript

JavaScript是什么?        JavaScript是一种原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,为客户提供更流畅的浏览效果      ...
  • zwk626542417
  • zwk626542417
  • 2013年11月20日 09:52
  • 3252

JavaScript入门篇之Cookie的应用

最近看着人事系统的代码,还真是头疼。。为了尽快上手,看懂点东西,便快马加鞭了。看到前台用到了cookie,正好JS也学到了这个地方,这样就介绍一下Cookie的应用。 一、Cookie是什么...
  • u012904383
  • u012904383
  • 2015年01月29日 16:32
  • 1495

javascript新手入门必读书籍推荐

在当下,极多的程序员是通过自学来完成入门以及提升的。对于javascript的学习来说,同样不例外。许多新手入门javascript选择通过视频教程或者论坛交流的方式进行学习,这种方式固然较为轻松和便...
  • yangnihaozan
  • yangnihaozan
  • 2015年09月08日 17:49
  • 15923

JavaScript基础篇——浅谈cookie

  • 2016年04月23日 20:48
  • 15KB
  • 下载

JavaScript 数据存储之Cookie篇

1.什么是cookie? 答:cookie是用于在客户端存储会话信息的。 2.cookie的组成部分? ①名称:一个唯一确定cookie 的名称。建议区分大小写。cookie 的名称必...
  • super_yang_android
  • super_yang_android
  • 2016年04月05日 12:28
  • 366

JavaScript操作Cookie——基础篇

引言    最近在项目中需要用到cookie来区分UV和PV的数量,之前都是在在后台方法中利用c#操作cookie,而这次根据 需求需要在js中操作cookie,当时遇到这个问题的时候感觉是比...
  • u013045437
  • u013045437
  • 2016年03月29日 20:31
  • 755

JavaScript入门之事件、cookie、定时篇

转载自原文:http://select.yeeyan.org/view/213582/211146 引言:本文从上一篇文章结束的地方开始,解释其他的一些基本的JavaScript语言概念,继续为...
  • jokeesloat
  • jokeesloat
  • 2013年06月20日 13:40
  • 612

JavaScript篇之缓存cookie的操作

Preface除了能用php方式操作cookie外,通过纯js的方式也能操作它,当然两者也可以配合使用了,这也算是服务器端的php和客户端的js的一种交互方式吧! PS: 除了利用 COOKIE 进...
  • backOrigin
  • backOrigin
  • 2016年12月14日 01:34
  • 293

Javascript与网络cookie

  • 2013年11月05日 22:26
  • 735KB
  • 下载

javascript实现操作cookie实现的可记忆菜单

  • 2009年10月12日 14:58
  • 5KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初学Javascript之cookie篇(译)
举报原因:
原因补充:

(最多只允许输入30个字)