none
使用JS删除Cookie RRS feed

  • 问题

  • 两个页面使用同样的方法,另一个页面却不能删除Cookie
    成功的页面是这样的:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>Untitled Page</title>
        <script type="text/javascript">
            function SetCookie(name, value, expires, path, domain, secure) {
                document.cookie = name + "=" + encodeURI(value) +
    	        ((expires) ? "; expires=" + expires : "") +
    	        ((path) ? "; path=" + path : "") +
    	        ((domain) ? "; domain=" + domain : "") +
    	        ((secure) ? "; secure" : "");
            }
    
            function DeleteCookie(name) {
                var date = new Date();
                date.setTime(date.getTime() - 10000); //删除一个cookie,就是将其过期时间设定为一个过去的时间
                document.cookie = name + "=删除" + "; expires=" + date.toUTCString();
                //document.cookie = " " + name + "=删除" + "; expires=" + date.toGMTString();
            }
    
            SetCookie("UserName", "lipei");
            SetCookie("UserPwd", "123123");
            alert(document.cookie);
            DeleteCookie("UserPwd");
            alert(document.cookie);
        </script>
    </head>
    <body>
    
    </body>
    </html>
    




    不成功的页面是这样的:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title></title>
        <script type="text/javascript" src="../JS/jquery-1.3.2.js"></script>
        <script type="text/javascript" src="../JS/WindowHelper.js"></script>
        <script type="text/javascript" src="../JS/CookieHelper.js"></script>
        <script type="text/javascript">
            $(document.body).ready(function() {
                var cookieHelper = new CookieHelper();
                var windowHelper = new WindowHelper();
                var userName = windowHelper.QueryString("UserName");
                alert(cookieHelper.ReadCookie("UserName"));
                if (cookieHelper.ReadCookie("UserName") == null) {
                    document.URL = "../Login.html?ReturnUrl=UserDetail.html";
                }
    
                //alert(userName);
                $.ajax({
                    type: "GET",
                    cache: false,
                    url: "../Handlers/UserHandler.ashx?Action=GetUserInfo&UserName2=" + userName,
                    dataType: "text",
                    processData: false,
                    error: function(error) {
                        alert("error:" + error);
                    },
                    success: function(data) {
                        var jsonObj = eval("(" + data + ")");
                        DataBind(jsonObj);
                    }
                });
    
                $("#btnLogOut").click(function() {
                    var cookieHelper = new CookieHelper();
                    alert("Cookie:" + document.cookie);
                    DeleteCookie("UserName");
                    alert("Cookie:" + document.cookie);
                    document.URL = "../Login.html";
                });
            });
            function DeleteCookie(name) {
                var date = new Date();
                date.setTime(date.getTime() - 10000); //删除一个cookie,就是将其过期时间设定为一个过去的时间
                document.cookie = name + "=删除" + "; expires=" + date.toUTCString();
                //document.cookie = " " + name + "=删除" + "; expires=" + date.toGMTString();
            }
            function DataBind(jsonObj) {
                if (jsonObj != null) {
                    $("#spanUserName").text(jsonObj.UserName);
                    $("#spanQuestion").text(jsonObj.Question);
                    $("#spanEmail").text(jsonObj.Email);
                    $("#spanImage").text(jsonObj.ImagePath);
                }
            }
        </script>
    </head>
    <body>
        <table border="0" width="80%">
            <tr>
                <td width="30%">用户名:</td>
                <td width="70%"><span id="spanUserName"></span></td>
            </tr>
            <tr>
                <td>问题:</td>
                <td><span id="spanQuestion"></span></td>
            </tr>
            <tr>
                <td>Email:</td>
                <td><span id="spanEmail"></span></td>
            </tr>
            <tr>
                <td>Image:</td>
                <td><span id="spanImage"></span></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
            </tr>
            <tr>
                <td><a href="UserList.html">所有用户列表</a></td>
                <td><input type="button" id="btnLogOut" value="注销" /></td>
            </tr>
            <tr>
                <td></td>
                <td></td>
            </tr>
        </table>
    </body>
    </html>
    

    大家帮我看看这是为什么额?





    Do My Best
    • 已移动 Sheng Jiang 蒋晟 2009年12月25日 15:48 客户端脚本问题 (发件人:ASP.NET 与 AJAX)
    2009年12月23日 1:16

全部回复

  • 你检查下你的CookieHelper中的方法和你的第一个页面的方法是否一致或者有效


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年12月23日 1:51
    版主
  • COPY的,两个方法是完全一样的
    Do My Best
    2009年12月23日 2:51
  • $("#btnLogOut").click(function() {
                    var cookieHelper = new CookieHelper();
                    alert("Cookie:" + document.cookie);
                    DeleteCookie("UserName");//有这个方法吗? 是否写错了
                    alert("Cookie:" + document.cookie);
                    document.URL = "../Login.html";
                });
    2009年12月23日 9:04
  • 有这个方法啊。上面的代码有。
    Do My Best
    2009年12月23日 12:07
  •                 var cookieHelper = new CookieHelper();这个干什么?
    2009年12月23日 12:11
  • 哦。这是我写的一个类

    /*
        CookieHelper 构造函数
    */
    function CookieHelper() { }
    
    /* 读取 Cookie 值 */
    CookieHelper.prototype.ReadCookie = function(name) {
        var cookieString = decodeURI(document.cookie);
        if (cookieString.length != 0) {
            var cookieArray = cookieString.split(";");
            for (var i = 0; i < cookieArray.length; i++) {
                var cookieNum = cookieArray[i].split("=");
                var cookieName = cookieNum[0];
    
                // 去除前面的空格
                var index = cookieName.search(/[^\s]/ig);
                cookieName = cookieName.substr(index);
                if (cookieName == name) {
                    var cookieValue = cookieNum[1];
                    return cookieValue;
                }
            }
        }
        else {
            alert("暂时没有Cookie,请填写信息,单击提交按钮");
        }
    }
    
    /* 写入 Cookie */
    CookieHelper.prototype.SetCookie = function(name, value, expires, path, domain, secure) {
        document.cookie = name + "=" + encodeURI(value) +
    	((expires) ? "; expires=" + expires : "") +
    	((path) ? "; path=" + path : "") +
    	((domain) ? "; domain=" + domain : "") +
    	((secure) ? "; secure" : "");
    }
    
    /* 删除 Cookie */
    CookieHelper.prototype.DeleteCookie = function(name) {
        var date = new Date();
        date.setTime(date.getTime() - 10000); //删除一个cookie,就是将其过期时间设定为一个过去的时间
        document.cookie = name + "=删除" + "; expires=" + date.toGMTString();
        document.cookie = " " + name + "=删除" + "; expires=" + date.toGMTString();
    }

    Do My Best
    2009年12月24日 2:31
  • $("#btnLogOut").click(function() {
                    var cookieHelper = new CookieHelper();
                    alert("Cookie:" + document.cookie);
                    DeleteCookie("UserName");//有这个方法吗? 是否写错了
                    alert("Cookie:" + document.cookie);
                    document.URL = "../Login.html";
                });

    你这个写错了
    应该是
     cookieHelper. DeleteCookie("UserName");
    2009年12月24日 4:39
  • 我这样写也不可以。因为我最开始就是这样写,因为不行,我才把那个方法抽出来放在页面上,就是页面上的那个DeleteCookie方法,抽出来后也不可以。
    Do My Best
    2009年12月24日 5:03
  • 但是您看我第一个页面上那么写就可以。也不知道是为什么?
    Do My Best
    2009年12月24日 5:04
  • CookieHelper.prototype.DeleteCookie = function(name) {
        var date = new Date();
        date.setTime(date.getTime() - 10000); //删除一个cookie,就是将其过期时间设定为一个过去的时间
        document.cookie = name + "=删除" + "; expires=" + date.toGMTString();
        document.cookie = " " + name + "=删除" + "; expires=" + date.toGMTString(); 怎么没注释掉
    }
    2009年12月24日 5:25
  • 好像不是因为那个。
    Do My Best
    2009年12月25日 14:30
  • 好像不是因为那个。
    Do My Best

    你干脆把全部代码贴出来 测试一下
    2009年12月25日 14:37
  • 您所测试的两个页面的URL或者路径深度是一样的吗?


    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。 同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。
    2009年12月30日 16:15
  • 您所测试的两个页面的URL或者路径深度是一样的吗?


    Most questions i'm interested in might have two or more possible answers i know or i don't know. So please read question carefully before you try to answer, and explan your question detailedly before asking for help. 很多看起来简单的问题都存在多种可能性,如果您不能详细的解释,别人就不能正确判断出您所遭遇的实际状况,因而不能给出最适合的解决办法。在您没有给出详细信息的情况下,施助者只有张贴大量有可能有关的解决办法。而您可能没有耐心阅读所有这些东西,在这种情况下您就客观地形成了对施助者的伤害——除非“施助者”并没有用心去尝试帮助您。同样地,当您尝试解答一个看起来“好像遇到过”的问题的时候,您也需要详细地阅读和理解这个问题。如果您不了解问题的细节,您可能会给出不相关的或者无助于解决当前问题的解答。

    路径深度也影响Cookie吗?
    Do My Best
    2010年2月19日 9:51
  • 给出一个常用的JS操作Cookie的小型类库,操作比较简单,

    一、用法如下:

    1、设置Cookie:采用set方法

    2、获取Cookie:采用get方法

    3、清除Cookie:采用clear方法

    4、根据Offset获取Cookie:采用getCookieVal方法

    二、具体类源码如下:

    if(!Ext.util) Ext.util={};
    Ext.util.Cookies = {
     set : function(name, value){
      var argv = arguments;       
      var argc = arguments.length;       
      var expires = (argc > 2) ? argv[2] : null;       
      var path = (argc > 3) ? argv[3] : '/';       
      var domain = (argc > 4) ? argv[4] : null;       
      var secure = (argc > 5) ? argv[5] : false;       
      document.cookie = name + "=" + escape(value) + ((expires === null) ? "" : ("; expires=" + expires.toGMTString())) + ((path === null) ? "" : ("; path=" + path)) + ((domain === null) ? "" : ("; domain=" + domain)) + ((secure === true) ? "; secure" : "");   
     },
     get : function(name){       
      var arg = name + "=";       
      var alen = arg.length;       
      var clen = document.cookie.length;       
      var i = 0;       
      var j = 0;       
      while(i < clen){           
       j = i + alen;           
       if(document.cookie.substring(i, j) == arg){               
        return Ext.util.Cookies.getCookieVal(j);           
       }           
       i = document.cookie.indexOf(" ", i) + 1;           
       if(i === 0){               
        break;           
       }       
      }       
      return null;   
     },
     clear : function(name){       
      if(Ext.util.Cookies.get(name)){           
       document.cookie = name + "=" + "; expires=Thu, 01-Jan-70 00:00:01 GMT";       
      }   
     },
     getCookieVal : function(offset){       
      var endstr = document.cookie.indexOf(";", offset);       
      if(endstr == -1){           
       endstr = document.cookie.length;       
      }       
      return unescape(document.cookie.substring(offset, endstr));   
     }
    };


    喻敏华
    2010年6月28日 8:58