熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

初學Javascript之cookie篇(譯)

2013-11-15 11:51:42  來源: JSP教程 

  [譯者注將本文的最後示例代碼拷貝至文本文件中更名文件為格式文件在浏覽器中運行本文以該示例代碼講解]

  簡介

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

  問題是我想解決自動訪問這個頁面能夠限制你每一天只訪問它一次(不要忘記在這鏈接上點擊)
  現在為止每次一開始我做的第一件事就是手工選擇我的書簽加載這個頁面

  為什麼不為它創建一個簡單的腳本程序呢?
  因為我想讓它在Netscape和IE下都能夠同樣的工作我開始學習Javascript

  解決

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

  主題思想很簡單創建一個頁面並測試一下今天這個頁面是否已被加載過
  如果沒有加載那就通過它鏈接到並且設置
  這個頁面作為浏覽器的主頁

  獲取頁面並重定向是很容易的問題是如何記憶這個頁面已被訪問過

  因為Javascript沒有文件訪問的功能看來我們只能使用cookies了

  Cookies是一個有大小限制的變量它與一個服務器的域名相關聯
  默認情況下cookie的生存期是當浏覽器關閉時被清空(注意不是當你離開
  這個頁面的時候)但可以用一個腳本程序改變這種情況
  在用戶關閉浏覽器後使cookies能夠存儲下來Netscape在文件中使用所有的
  Cookie而IE分別存儲每個cookie此外不同的浏覽器會帶來一些意想
  不到的情況你必須確定一個用戶在它的浏覽器設置中是否關閉了cookies

  一切都很好也很妙只是現在我還未在IE中測試它調用示例Javascript語句
  cookieExpires = APR + nLyear + GMT;
  okies = cookieName + = + cookieValue + ;  expires= + cookieExpires;

  然後調用
  documentwrite(okie);

  okie是空的

  在試驗和研究了一下上面的示例程序後會發現

  你不能夠讀和顯示cookie如果你想看一下這個cookie你需要指定與它相同的另一個字符串變量如下
   okie = cookieName + = + cookieValue + ; expires= + cookieExpires;
   myvar = cookieName + = + cookieValue + ; expires= + cookieExpires;
   documentwrite(myvar);

   浏覽器用了不同的日期格式
    Netscape使用GMT結束IE使用UTC這是因為它可以更好的構建一個日期象下面這樣
      var expdate = new Date()
   cookieExpiressetTime (expdategetTime() + * ( * * * )) //+ day
   cookieExpirestoGMTString()

  當你顯示日期部分
   documentwrite(expdategetYear() + <br> + expdategetMonth() + <br> + expdategetDate());
   對於的日期在IE中顯示為//在Netscape下顯示//(注已確定是一些較低版本的
   Netscape 浏覽器的YK問題)

  示例中看到像下面這樣的部分
   if (platform == Mac) {
   lastVisit = lastVisit ( * * * )
   }
   但我不可能檢測它

  日期對象有getDate和getDay的方法第二個方法返回在一周中天的索引號

  
  知道了這些基本上就沒問題了(現在你可以看一下)

  [譯者注將本文的最後示例代碼拷至文本文件中並保存htm格式然後運行]

  最後要說明的是這不僅是一個專用的JS腳本如果你想將它用在你的web頁面上你必須最小程度的使用不同的浏覽器測試它並注意它們的版本許多的腳本程序包含了浏覽器類型檢測和大量的ifelse語句以處理這樣不同

  示例頁面源代碼

  <html>
  <head>
  <title>Homepage</title>
  </head>
  <body>
  <a >Manual redirection<br></a>
  <a javascript:ResetCookie()>Cookie reset</a>

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

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

  if(lastHeregetYear() == rightNowgetYear()
     && lastHeregetMonth() == rightNowgetMonth()
     && lastHeregetDate() == rightNowgetDate())
  {
     bVisitedToday = true;
    }
  }

  if(bVisitedToday == false)
  {
  setLastlastVisitCookie();
  windowlocation=
  }
  else
  {
  //windowlocation=about:blank
  }

  function getCookieVal (offset)
  {
  var endstr = okieindexOf (; offset);
  if (endstr == )
    endstr = okielength;
  return unescape(okiesubstring(offset endstr));
  }
  function GetCookie (name)
  {
  var arg = name + =;
  var alen = arglength;
  var clen = okielength;
  var i = ;
  while (i < clen) {
    var j = i + alen;
    if (okiesubstring(i j) == arg)
      return getCookieVal (j);
    i = okieindexOf( i) + ;
    if (i == ) break;
  }
  return null;
  }
  function SetCookie (name value)
  {
  var argv = SetCookiearguments;
  var argc = SetCookieargumentslength;
  var expires = (argc > ) ? argv[] : null;
  var path = (argc > ) ? argv[] : null;
  var domain = (argc > ) ? argv[] : null;
  var secure = (argc > ) ? argv[] : false;
  okie = name + = + escape (value) +
    ((expires == null) ? : (; expires= + expirestoGMTString())) +
    ((path == null) ? : (; path= + path)) +
    ((domain == null) ? : (; domain= + domain)) +
    ((secure == true) ? ; secure : );
  }
  function setLastlastVisitCookie ()
  {
  var rightNow = new Date();
  var expdate = new Date();
  expdatesetTime (expdategetTime() + * ( * * * )); //+ day
  SetCookie (lastVisit rightNowgetTime() expdate /);
  }
  function ResetCookie()
  {
    SetCookie(lastVisit null /);
  }
  // >
  </script>
  </body>
  </html>


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19761.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.