【问题标题】:Read cookies with JavaScript使用 JavaScript 读取 cookie
【发布时间】:2011-02-23 17:03:52
【问题描述】:

我知道如何在 JavaScript 中编写/创建 cookie ..................................... .....................

//Create the cookies
document.cookie = "Name=" + Name + ";expires=Friday, 31-Dec-2011 12:00:00 GMT; path=/";
document.cookie = "Surname=" + Surname + ";expires=Friday, 31-Dec-2011 12:00:00 GMT; path=/";
document.cookie = "Number=" + Number + ";expires=Friday, 31-Dec-2011 12:00:00 GMT; path=/";
document.cookie = "Email=" + Email + ";expires=Friday, 31-Dec-2011 12:00:00 GMT; path=/";
document.cookie = "Country=" + Country + ";expires=Friday, 31-Dec-2011 12:00:00 GMT; path=/";
document.cookie = "Company=" + Company + ";expires=Friday, 31-Dec-2011 12:00:00 GMT; path=/";
document.cookie = "Title=" + Job + ";expires=Friday, 31-Dec-2011 12:00:00 GMT; path=/";

但是我要如何在 JavaScript 中阅读它们中的每一个,因为我想在用户下次访问表单时填充文本框?

我试过了,但它不起作用:

var cookieName = ReadCookie("Name");
document.getElementById('txtName').value = cookieName;

用答案编辑:

我使用了这个代码..................................................

<script type="text/javascript">

function getCookie(c_name)
{
  if (document.cookie.length>0)
  {
      c_start=document.cookie.indexOf(c_name + "=");
      if (c_start!=-1)
        {
        c_start=c_start + c_name.length+1;
        c_end=document.cookie.indexOf(";",c_start);
        if (c_end==-1) c_end=document.cookie.length;
        return unescape(document.cookie.substring(c_start,c_end));
        }
     }
     return "";
 }

function checkCookie()
{
    Name = getCookie('Name');
    Surname = getCookie('Surname');
    Email = getCookie('Email');
    Company = getCookie('Company');
    Title = getCookie('Title');

    if (Email!=null && Email!="")
      {
      //Populate the text boxes..................................
      document.FormName.txtName.value = Name;
      document.FormName.txtSurname.value = Surname;
      document.FormName.txtEmail.value = Email;
      document.FormName.txtCompany.value = Company;
      document.FormName.txtjob.value = Title;
      }
   }

</script>

然后像这样从window.onload调用checkCookie()函数

<SCRIPT TYPE='text/javascript' LANGUAGE='JavaScript'><!--    //

window.onload = initPage;

function initPage() 
{
    checkCookie();

}

//-->

享受!!

【问题讨论】:

标签: asp.net javascript html cookies


【解决方案1】:

来自http://w3schools.com/js/js_cookies.asp

设置 cookie

function setCookie(c_name,value,expiredays)
{
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays);
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

获取 cookie

function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}

【讨论】:

    【解决方案2】:

    这些是 much *much* 比 w3schools 更好的参考(有史以来最糟糕的网络参考):

    来自这些参考的示例:

    // sets the cookie cookie1
    document.cookie =
     'cookie1=test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'
    
    // sets the cookie cookie2 (cookie1 is *not* overwritten)
    document.cookie =
     'cookie2=test; expires=Fri, 3 Aug 2001 20:47:11 UTC; path=/'
    
    // remove cookie2
    document.cookie = 'cookie2=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/'
    

    mozilla 参考甚至有一个不错的 cookie 库供您使用。

    【讨论】:

      【解决方案3】:

      参考document.cookie 可以获得整个 cookie 字符串。它们用分号分隔。

      var cookies = document.cookie.split(';'); // "cookies" will be an array
      

      然后您可以使用名称->值映射将其设为对象:

      var cookieMap = {};
      for (var i = 0; i < cookies.length; ++i) {
        cookies[i].replace(/^\s*([^=]+)=(.*)$/, function(_, name, val) {
          cookieMap[name] = unescape(val);
        });
      }
      

      现在您可以像这样查看 cookie “mycookie”:

      var mycookieVal = cookieMap.mycookie;
      

      注意这是从最初的损坏版本开始编辑的 - 仍然是相同的想法,但它实际上不应该工作。这个想法是循环获取document.cookie 中用分号分隔的每个部分,然后将每个部分进一步拆分为名称部分(“=”之前的内容,前导空格除外)和“值”部分(“=”之后的东西到cookie部分的末尾)。然后将该值存储在给定名称下的“cookieMap”中。

      【讨论】:

      • 很酷,但是我如何获得一个单独的?
      • 我刚刚扩展了我的答案 - 其他答案中也有其他建议,例如无需构建地图即可返回特定 cookie 的函数。
      • var mycookieVal = cookieMap.Name;对吗?
      • 是的,但在我的示例中,cookie 的名称是“mycookie”。对不起,我原来的所有错误;现在应该都修好了。我不确定您是否需要另一个答案中的“逃逸”。
      • 我会在我的答案上做更多的工作;这是一个简单的问题,但我给自己(和你!)弄得一团糟。
      猜你喜欢
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 2011-12-25
      • 2010-11-24
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 2017-10-25
      相关资源
      最近更新 更多