测试页:testCookie.aspx,它在ForCookieUnit目录下,
ForCookieUnit是在程序目录。testCookie.aspx代码如下
protected void Button1_Click(object sender, EventArgs e)
    {
        HttpCookie hc = new HttpCookie("ForCookieUnit");
        hc.Value = "ABCDEF";
        hc["one"] = "item1";
        hc["two"] = "item2";
        hc.Expires = DateTime.Now.AddHours(1d);
        hc.Path = "CookieUnit";//只把这句写上就不能生成Cookie,去掉就可以。
        Response.Cookies.Add(hc);
    }    protected void Button2_Click(object sender, EventArgs e)
    {
        HttpCookie getcookies = Request.Cookies["ForCookieUnit"];//        Response.Write(getcookies.Value.ToString());
        Response.Write("<br/>" + getcookies["one"].ToString());
        Response.Write("<br/>" + getcookies["two"].ToString());
    }
什么就是不行呢???我眼睛都绿了。请明白人告诉我。
看MSDN说,Path 属性扩展 Domain 属性,难道要设Domain,可是本地如何高Domain,测试呢??

解决方案 »

  1.   

    原贴也是一个百分贴在http://community.csdn.net/Expert/topic/5642/5642271.xml?temp=.837414
    真是晕了倒,直等高人现身了。
      

  2.   

    我这里测试没有问题    protected void Button1_Click(object sender, EventArgs e)
        {
            HttpCookie hc = new HttpCookie("ForCookieUnit");
            hc.Value = "ABCDEF";
            hc["one"] = "item1";
            hc["two"] = "item2";
            hc.Expires = DateTime.Now.AddHours(1d);
            hc.Domain = "localhost";
            hc.Path = "/CookieUnit";
            Response.Cookies.Add(hc);
        }    protected void Button2_Click(object sender, EventArgs e)
        {
            HttpCookie getcookies = Request.Cookies["ForCookieUnit"];        Response.Write(getcookies.Value.ToString());
            Response.Write("<br/>" + getcookies["one"].ToString());
            Response.Write("<br/>" + getcookies["two"].ToString());
        }
      

  3.   

    没用过,我感觉你可能也不是必须用。为什么不换个思路呢?
    欢迎访问我的视频搜索引擎:V掌门:http://www.vzhangmen.com
      

  4.   

    amandag(高歌)
    我马上试试,好了立即给分。
    谢谢大家回贴。
      

  5.   

    @amandag(高歌)请您清空Cookie后,再试一次。
    我这里测试时出错(粘的你的代码)未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 37:         HttpCookie getcookies = Request.Cookies["ForCookieUnit"];
    行 38: 
    行 39:         Response.Write(getcookies.Value.ToString());
    行 40:         Response.Write("<br/>" + getcookies["one"].ToString());
    行 41:         Response.Write("<br/>" + getcookies["two"].ToString());
     源文件: c:\Inetpub\wwwroot\StudentVS2005\CookieUnit\Test_CookieDomain.aspx.cs    行: 39 堆栈跟踪: 
    [NullReferenceException: 未将对象引用设置到对象的实例。]
       CookieUnit_Test_CookieDomain.Button2_Click(Object sender, EventArgs e) in c:\Inetpub\wwwroot\StudentVS2005\CookieUnit\Test_CookieDomain.aspx.cs:39
       System.Web.UI.WebControls.Button.OnClick(EventArgs e) +105
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +107
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102 
    说明,还是没有写上cookie
      

  6.   

    @amandag(高歌)您拿什么测试的???我的是D版的VS2005 TS
      

  7.   

    你是什么时候清空的..如果你是按下Button1之后再清空,那刚才Button1写的Cookie就没了当然Button2的代码这样写更好
        protected void Button2_Click(object sender, EventArgs e)
        {
            if (Request.Cookies.Count > 0)
            {
                HttpCookie getcookies = Request.Cookies["ForCookieUnit"];            Response.Write(getcookies.Value.ToString());
                Response.Write("<br/>" + getcookies["one"].ToString());
                Response.Write("<br/>" + getcookies["two"].ToString());
            }
        }
      

  8.   

    我这里先用Button1,然后再按Button2,就能写出来然后关闭浏览器,再次打开,直接按Button2,还是能写出来
      

  9.   

    不过我想问一下,你用的是默认的ASP.NET Development Server还是IIS,我是用IIS的
      

  10.   

    amandag(高歌) 是是默认的ASP.NET Development Server
      

  11.   

    刚改用IIS,并发布了网站,新建虚拟目录,测试后还是不行。amandag(高歌) 您保存你生成了Cookie???不可能的,不在于先按哪个按钮,还是在IIS或是内置服务器。你在骗我吧。你上临时文件夹看一看,根本没有生成Cookie的。why 为什么要乱说。郁闷。
      

  12.   

    不管是IIS或是VS内置服务器,生成的Cookie都是在临时文件夹的。见鬼了,先哪个钮都是没有生成Cookie的,你怎么读的Cookie。真是郁闷,玩我呢???to amandag(高歌)????
      

  13.   

    1. 我没有乱说,我是根据我的理解并测试而说的
    2. 那个Path并不是用来给你保存cookie的路径,cookie保存的路径应该是在 C:\Documents and Settings\Administrator\Cookies 下(如果是永久cookie的话)
    3. 你应该知道cookie是保存在客户端的,你居然到服务器的path下找,你不觉得你的概念上有严重问题么?
      

  14.   

    @amandag(高歌)我没有上服务器端找,在客户端的C:\Documents and Settings\客户名\Cookies找的,没有生成任何文件,在临时文件夹中也没有。
      

  15.   

    @amandag(高歌) hc.Domain = "localhost";这项是网站的域设置吧,那么 localhost域名么,您又怎么测试成功的??
      

  16.   

    cookie的domain指定了此cookie所关联的域,默认为String.Empty,表示关联的域是当前Request对应的域。如果domain设定一个子域名,如cookie.Domain="qq.com",则表示此cookie关联qq.com下所有的下级域。因此,可以被www.qq.com games.brookes.com news.qq.com等共享
    而在我们本机是比较难以做这样的设置的//所以如果你的机器并没有设置过域名的话,你就用默认值string.Empty测试吧
        protected void Button1_Click(object sender, EventArgs e)
        {
            HttpCookie hc = new HttpCookie("ForCookieUnit");
            hc.Value = "ABCDEF";
            hc["one"] = "item1";
            hc["two"] = "item2";
            hc.Expires = DateTime.Now.AddHours(1d);
            hc.Domain = string.Empty;
            Response.Cookies.Add(hc);
        }    protected void Button2_Click(object sender, EventArgs e)
        {
            HttpCookie getcookies = Request.Cookies["ForCookieUnit"];        Response.Write(getcookies.Value.ToString());
            Response.Write("<br/>" + getcookies["one"].ToString());
            Response.Write("<br/>" + getcookies["two"].ToString());
        }还有楼主,到这里是来探讨问题的,请注意你的言辞。
      

  17.   

    没有办法,现在打算建一个域,测试一下,是不是hc.Domain = "localhost";这必须写域名{闹心,域一建了,用着一点也不习惯,就得重新装系统。这该死的MSDN文章,一点也不准。}
      

  18.   

    因此,可以被www.qq.com games.brookes.com news.qq.com等共享
    ===========================================================
    因此,可以被www.qq.com games.qq.com news.qq.com等共享
      

  19.   

    @amandag(高歌) 我也没说您什么啊,只是不认为您真的测试过了,对于您对我这个贴的热心回复,我表示感谢。
      

  20.   

    不过楼主,我很佩服你学习的精神如果你打算建域的话,最好叫个什么XXX.com来测试
      

  21.   

    @@amandag(高歌) 
    //所以如果你的机器并没有设置过域名的话,你就用默认值string.Empty测试吧
        protected void Button1_Click(object sender, EventArgs e)
        {
            HttpCookie hc = new HttpCookie("ForCookieUnit");
            hc.Value = "ABCDEF";
            hc["one"] = "item1";
            hc["two"] = "item2";
            hc.Expires = DateTime.Now.AddHours(1d);
            hc.Domain = string.Empty;
            Response.Cookies.Add(hc);
        }    protected void Button2_Click(object sender, EventArgs e)
        {
            HttpCookie getcookies = Request.Cookies["ForCookieUnit"];        Response.Write(getcookies.Value.ToString());
            Response.Write("<br/>" + getcookies["one"].ToString());
            Response.Write("<br/>" + getcookies["two"].ToString());
        }这段代码,按的理解是不是就可以通过了呢??我重新建的项目,并测试,结果还是没有通过。
    未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 39:             HttpCookie getcookies = Request.Cookies["ForCookieUnit"];
    行 40: 
    行 41:             Response.Write(getcookies.Value.ToString());
    行 42:             Response.Write("<br/>" + getcookies["one"].ToString());
    行 43:             Response.Write("<br/>" + getcookies["two"].ToString());
     源文件: c:\Inetpub\wwwroot\StudentVS2005\CookieUnit\Test_CookieDomain.aspx.cs    行: 41 显然,还是程序还是没有找到Cookie,也就是说没有生成cookie
      

  22.   

    @amandag(高歌)您可能生气了,我只是报着学习的态度,照着MSDN那篇文章,去作的。却一天也没有弄明白这个问题,所以帖子中的怨气多了些。我是菜鸟我承认,但是我就是想弄明白这是为什么。谢谢您的回贴。
      

  23.   

    上面这个应该肯定能成功地..我这里试了N次了,我的cookie也被我清空N次了
      

  24.   


    hc.Domain = string.Empty;
    我这里是100%成功C:\Documents and Settings\Administrator\Cookies 文件夹下也生成了
    administrator@localhost[1].txt
      

  25.   

    @amandag(高歌)您的代码是成功的,因为您没有写hc.Path = "/CookieUnit";是的,如果不写是会成功的,如果不写hc.Domain ,真是默认的。但是我写的本意就是要弄懂hc.Path为什么通不过,现在变成了不写它,就能通过。我现在脑子一片空白。MSDN我也不打算看了,反正都是一样的认识,不会也就不会了,再次真心的谢谢您[真的]
      

  26.   

    呵呵,这个问题如果不是在实际的Web服务器上测试,怕是不会有多大效果。点到为止吧,楼主这个问题也快搞了一天了
      

  27.   

    设置Path需要这样设置
    hc.Path = "/CookieUnit";测试正确的例子:
    http://127.0.0.1/ForCookieUnit/testCookie.aspx
    文件内容:
    <%@ Page Language="C#" validateRequest="false" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
    protected void Button1_Click(object sender, EventArgs e)
    {
      HttpCookie hc = new HttpCookie("ForCookieUnit");
      hc.Value = "ABCDEF";
      hc["one"] = "item1";
      hc["two"] = "item2";
      hc.Expires = DateTime.Now.AddHours(1d);
      hc.Path = "/CookieUnit";
      Response.Cookies.Add(hc);
    }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title></title>
    </head>
    <body>
      <form id="MengXianhui" runat="server">
        <asp:Button ID="btnUpload" runat="server" Text="Save" OnClick="Button1_Click"></asp:Button>
      </form>
    </body>
    </html>
    查看页面
    http://127.0.0.1/CookieUnit/GetCookie.aspx
    <%@ Page Language="C#" validateRequest="false" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">
    protected void Button1_Click(object sender, EventArgs e)

      if(Request.Cookies["ForCookieUnit"]!= null)
      {
       msg.Text = "测试:" + Request.Cookies["ForCookieUnit"]["one"]; 
      }
      else
      {
      msg.Text = "null";
      }
    }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title></title>
    </head>
    <body>
      <form id="MengXianhui" runat="server">
       <asp:Label id="msg"  runat="server" />
        <asp:Button ID="btnUpload" runat="server" Text="Save" OnClick="Button1_Click"></asp:Button>
      </form>
    </body>
    </html>
    如果这两个目录都是应用程序的普通目录的话(这里的测试是这样设置的),应该是没有问题的
      

  28.   

    可以不设置domain,只要访问方式不变即可
      

  29.   

    一直觉得,泡面难吃,今天更是难吃,心里还想着那个问题,真是难受。
    打算,散完分,就睡了,可是一看net_lover(【孟子E章】的回复,让我又觉得有了些希望。可是一细看,和我的代码也没有区别,可是又看了第一遍才发现“测试正确的例子”,忽然想会不会是测试的问题呢,照着孟子的方法一测,OK,万岁,我的一天没有白费,这方便面味太好……,以前没有看过net_lover(【孟子E章】) ,今天才知CSDN有钻石有真才啊。我心里高兴,谢谢net_lover(【孟子E章】) ,谢谢高歌,谢谢老天,没让我的努力浪费,我终于知道了。
    才发觉,强人不是盖的,他能让不好吃的泡面变得如此美味,谢谢,谢谢[太激动了,谢谢net_lover(【孟子E章】]
      

  30.   

    谢谢,net_lover(【孟子E章】,谢谢amandag(高歌),我结贴。我……,太高兴了,我吃了一袋泡面[头一回吃三包泡面。]
      

  31.   

    总算找到了,让人感动,刚学时也这样叫真儿。兄弟,快去申请个免费的空间,学起来就更好了。 [免费的ASP.NET2.0+SQL2005空间],是外国的。送给,没有钱的初学朋友们。快去抢! http://community.csdn.net/Expert/topic/5642/5642758.xml?temp=.5291101