注意:cookie是基於域名來儲存的。要放到測試服務器上或者本地localhost服務器上才會生效。cookie具有不同域名下儲存不可共享的特性。單純的本地一個html頁面打開是無效的。
明明在瀏覽中可以查看到有某一個cookie 的存在,可是用js卻始終無法獲取到它的值,這個問題困擾我許久。偶然間想到可能是iframe的原因,經過一番查閱發現果真如此。
將場景還原一下:
我在一個iframe中使用setCookie方法設置了名為“myCookie”的cookie。
function setCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
而后在另一個iframe使用getCookie方法取出這個cookie:
function getCookie(objname)
{
console.log(document.cookie)
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
else
return null;
}
可是取出的值一直是null,百思不得其解。
終於經過一番探究與查閱之后,得出結論:cookie跨域導致其丟失。
百度上有很多博客上作了相關記載,這里不作詳究。
既然得出了原因,那么解決方法也就浮於水面了。我在網上找到一款名為jquery cookie的輕量級插件,對於cookie的操作作了有效的封裝,可以解決這類問題。
這是官方的下載地址:http://plugins.jquery.com/cookie/
jquery.cookie.js 的配置
首先包含jQuery的庫文件,在后面包含 jquery.cookie.js 的庫文件。
使用方法
1.新添加一個會話 cookie:
$.cookie(‘the_cookie’, ‘the_value’);
注:當沒有指明 cookie有效時間時,所創建的cookie有效期默認到用戶關閉瀏覽器為止,所以被稱為
“會話cookie(session cookie)”。
2.創建一個cookie並設置有效時間為 7天:
$.cookie(‘the_cookie’, ‘the_value’, { expires: 7 });
注:當指明了cookie有效時間時,所創建的cookie被稱為“持久 cookie (persistent cookie)”。
3.創建一個cookie並設置 cookie的有效路徑:
$.cookie(‘the_cookie’, ‘the_value’, { expires: 7, path: ‘/’ });
注:在默認情況下,只有設置 cookie的網頁才能讀取該 cookie。如果想讓一個頁面讀取另一個頁面設置的cookie,必須設置cookie的路徑。cookie的路徑用於設置能夠讀取 cookie的頂級目錄。將這個路徑設置為網站的根目錄,可以讓所有網頁都能互相讀取 cookie (一般不要這樣設置,防止出現沖突) 。
4.讀取cookie:
$.cookie(‘the_cookie’); // cookie存在 => ‘the_value’
$.cookie(‘not_existing’); // cookie不存在 => null
5.刪除cookie,通過傳遞null作為cookie的值即可:
$.cookie(‘the_cookie’, null);
———-相關參數的解釋—————
1).expires: 365
定義cookie的有效時間,值可以是一個數字(從創建cookie時算起,以天為單位)或一個Date 對象。如果省略,那么創建的cookie是會話cookie,將在用戶退出瀏覽器時被刪除。
2).path: ‘/’
默認情況:只有設置cookie的網頁才能讀取該cookie。
定義cookie的有效路徑。默認情況下, 該參數的值為創建 cookie 的網頁所在路徑(標准瀏覽器的行為) 。
如果你想在整個網站中訪問這個cookie需要這樣設置有效路徑:path: ‘/’。如果你想刪除一個定義 了有效路徑的 cookie,你需要在調用函數時包含這個路徑:$.cookie(‘the_cookie’, null, { path: ‘/’ });。
domain: ‘example.com’
默認值:創建 cookie的網頁所擁有的域名。
3).secure: true
默認值:false。如果為true,cookie的傳輸需要使用安全協議(HTTPS)。
4).raw: true
默認值:false。
默認情況下,讀取和寫入 cookie 的時候自動進行編碼和解碼(使用encodeURIComponent 編碼,decodeURIComponent 解碼)。
要關閉這個功能設置 raw: true 即可。
————————————————
原文鏈接:https://blog.csdn.net/qq_28550739/article/details/61915450