標籤: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的解釋