document.cookie.indexof的解釋

來源:互聯網
上載者:User

標籤:io   使用   ar   strong   div   art   sp   問題   cti   

代碼:
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 usescape(document.cookie.substring(c_start, c_end));

           }

       }
 
}

 

解釋:

1、cookie儲存在系統中的時候是“cookie名1 = cookie值; cookie名2 = cookie值”這樣的方式來儲存的。

2、document.cookie是返回包含所有cookie的字串。

3、document.cookie.index(c_name + "=")是取得這個cookie名在整個cookie中的位置。(加“=”號:取cookie名加上等號的位置,比方整個cookie是"user=tony; passwd=user123",這時候尋找名為user的cookie值的時候,是尋找"user="的位置;如果不要等號,就會找到其它位置的"user",比如後面密碼裡面也有user字元,但並不是cookie中cookie名都是唯一的,所以加上等號就不會出錯。 )

4、c_start = c_start + c_name.length + 1是用先前取得的位置加上cookie名的長度再加1,就是把位置確定在這個cookie名的“=”符號的後面。

5、c_end = document.cookie.indexof(";", c_start)是從上一步的位置開始尋找的,直到";"的位置。

6、document.cookie.substring(c_start, c_end)就是取該cookie名的等號後面到分號前面的字串,即對應的cookie的值。

 

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

更好的讀取Cookie

        寫代碼的時候,我們經常去使用一些開放的代碼,尤其是讀寫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 (document.cookie.substring(c_start,c_end));

                } 

        }

        return "";

}

        上面這段代碼是用來讀取cookie的,但它存在一個問題,比如當cookie中同時存在這樣兩個欄位“kuin=12345”和"uin=67890"時,如果

kuin在cookie中位於uin的前面,那麼上面這段代碼就無法讀取uin的值了,因為它會誤把kuin當作uin來讀取。

        那麼如何修複呢,下面是最佳化後的代碼:

function getCookie(c_name)

{

        if (document.cookie.length>0)

        {

                var tmp_cookie = document.cookie,

                tmp_c1 = (tmp_cookie.indexOf(" "+c_name+"=")>0) ? (tmp_cookie.indexOf(" "+c_name+"=")+1) : 0,

                tmp_c2 = (tmp_cookie.indexOf(";"+c_name+"=")>0) ? (tmp_cookie.indexOf(";"+c_name+"=")+1) : 0,

                tmp_c3 = (tmp_cookie.indexOf(c_name+"=")==0) ? 0 : -1,

                c_start=tmp_c1 || tmp_c2 || tmp_c3;

                if (c_start!=-1)

                {

                        c_start=c_start + c_name.length+1;

                        var c_end=tmp_cookie.indexOf(";",c_start);

                        if (c_end==-1) c_end=tmp_cookie.length;

                        return (tmp_cookie.substring(c_start,c_end));

                }

        }

        return "";

}

補充:如果cookie中存在大量的值,我們就沒有必要不斷的使用getCookie()去讀取了,更高效的方法是在第一次讀取時直接將所有cookie解

析出來並存放在一個對象中,如下:

cookie = {

        uin: 12345,

        kuin: 59432,

        nick: flondon

};

(轉)document.cookie.indexof的解釋

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.