• asp(utf-8) set cookie 用 javascript 读cookie发现一个问题


    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; 
    }

  • 相关阅读:
    Codeforces Round #368 (Div. 2)D. Persistent Bookcase DFS
    POJ Sudoku 数独填数 DFS
    Memory
    UESTC 771 最大容积(前缀后缀和)
    【题解】P2916 [USACO08NOV]安慰奶牛Cheering up the Cow-C++
    Prim算法与Kruskal(没有代码)
    【题解】P1396 营救-C++
    【题解】Unit Fraction Partition-C++
    【题解】P2078 朋友-C++
    【题解】P1892 [BOI2003]团伙-C++
  • 原文地址:https://www.cnblogs.com/personnel/p/4583007.html
Copyright © 2020-2023  润新知