asp(utf-8) set cookie 用 javascript 讀cookie發現一個問題

來源:互聯網
上載者:User

標籤:

asp:

<%setCookie("user_id","test")%>   //傳一個cookie ,名: user_id 值:test

javascript:

<script>
alert(getCookie("user_id")); //讀取結果顯示 null   暈!
</script>

用 firefox 查看cookie,發現瀏覽器存放的cookie有點不同。

cookie的名:user_id 改成了 user%5Fid

為什麼名稱會改變呢?我到百度搜尋,找到原因:
http://bbs.chinaunix.net/thread-743431-1-1.html

原來當asp採用utf-8編碼後,寫入瀏覽器的cookie會進行 urlencode 編碼。

解決辦法就是在javascript裡進行解碼: decodeURIComponent

 

修改後的 javascript代碼:

//設定名稱為name,值為value的Cookie
function setCookie (name, value) 
{
var argc = setCookie.arguments.length;
var argv = setCookie.arguments; 
var path = (argc > 3) ? argv[3] : null; 
var domain = (argc > 4) ? argv[4] : null; 
var secure = (argc > 5) ? argv[5] : false; 
document.cookie = name + "=" + value + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); 
}

//刪除名稱為name的Cookie
function deletecookie (name) 

    var exp = new Date(); 
    exp.setTime (exp.getTime() - 1); 
    var cval = getCookie (name); 
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString(); 
}

//取得項名稱為offset的cookie值
function getCookieVal (offset)
{
var cookie_content = decodeURIComponent(document.cookie);
var endstr = cookie_content.indexOf (";", offset); 
if (endstr == -1) endstr = cookie_content.length; return unescape(cookie_content.substring(offset, endstr));                               } 
                                      
//取得名稱為name的cookie值
function getCookie (name) 
{
var arg = name + "="; 
var alen = arg.length; 
var cookie_content = decodeURIComponent(document.cookie);
var clen = cookie_content.length; 
var i = 0; 
while (i < clen) 
{
   var j = i + alen; 
   if (cookie_content.substring(i, j) == arg) 
   return getCookieVal (j); 
   i = cookie_content.indexOf(" ", i) + 1; 
   if (i == 0) break; 

return null; 
}

asp(utf-8) set cookie 用 javascript 讀cookie發現一個問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.