none
【ASP.NET】为什么获取不到Cookie文件 急+++++ RRS feed

  • 问题

  • 刚才做了一个实验,网站存储用户的Cookie文件,之后再取出该文件,却发现了一个问题。
    首先在IsPostBack判断具有指定名称的Cookie文件是否存在,语法这样写道:Request.Cookies["HongHu"] != null

    但程序似乎没有达到预想效果,发现Request.Cookies["HongHu"]是空的,那么我就纳闷了,查看本地路径之前存储的Cookie文件确实存在,我联想到是不是Request.Cookies["HongHu"]默认检查路径不在指定文件夹里检索呢?跟踪了下发现确实如此,请问高手我如何才能让程序在本机制定位置查找Cookie文件呢?难道需要遍历本机整个硬盘?不会吧~请赐教  谢谢


    第一次登录没有Cookie文件,点击按钮保存Cookie文件,代码如下:

    protected void log_Click(object sender, EventArgs e)
        {
            //保存并加密Cookie
            if (this.cbpwd.Checked)
            {

                HttpCookie hc = new HttpCookie("HongHu");
                app.InputString = this.username.Value;//加密用户名
                app.DesEncrypt();
                hc.Values["username"] = app.OutString;
                app.InputString = this.password.Value;//加密密码
                app.DesEncrypt();
                hc.Values["password"] = app.OutString;
                DateTime dt = DateTime.Now;
                hc.Secure = true;
                hc.Expires = dt.AddDays(31);//保存一个月
                Response.Cookies.Add(hc);
            }
        }

    当第二次访问网页获取Cookie文件,代码如下:

        protected void Page_Load(object sender, EventArgs e)
        {
            //if (!IsPostBack)
            //{
                HttpCookie cookie;
                if (Request.Cookies["HongHu"]!=null)//检测Cookie是否为空
                    {
                        cookie = Request.Cookies["HongHu"];
                        if (cookie.Values["username"] != null && cookie.Values["password"] != null)//检测用户名和密码是否为空
                        {
                            string name = string.Empty, pwd = string.Empty;
                            app.InputString = cookie.Values["username"];
                            app.DesDecrypt();
                            name = app.OutString;

                            app.InputString = cookie.Values["password"];
                            app.DesDecrypt();
                            pwd = app.OutString;

                            Response.Write(name + "<br>" + pwd);
                        }

                    }
               
     
            //}
        }

    问题出在 if (Request.Cookies["HongHu"]!=null)//这里始终是空的,什么原因导致的呢?

    PS:我本机Cookie文件存放在C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files文件夹下

    • 已移动 肖小勇Moderator 2010年1月9日 1:42 asp.net 相关问题 (发件人:.NET Framework 一般性问题讨论区)
    2010年1月8日 14:37

答案

  • 你好!

    去掉 hc.Secure = true; 

    Secure = true 表示 Cookie 是否应该仅通过 HTTPS 连接传输

    知识改变命运,奋斗成就人生!
    • 已标记为答案 jinwb1982 2010年1月9日 15:50
    2010年1月9日 1:42
    版主

全部回复

  • 你好!

    去掉 hc.Secure = true; 

    Secure = true 表示 Cookie 是否应该仅通过 HTTPS 连接传输

    知识改变命运,奋斗成就人生!
    • 已标记为答案 jinwb1982 2010年1月9日 15:50
    2010年1月9日 1:42
    版主
  • 你好!

    去掉 hc.Secure = true; 

    Secure = true 表示 Cookie 是否应该仅通过 HTTPS 连接传输

    知识改变命运,奋斗成就人生!

    去掉我也试了,都不好用,而且我发现程序是正确的,Cookie已经成功存储到了硬盘中,为什么读取不到呢?
    2010年1月9日 5:57
  • 你好!

    我用你的代码去掉了加密是可以的。

    protected void Page_Load(object sender, EventArgs e)
    {
        HttpCookie cookie = Request.Cookies["HongHu"];
    
        if (cookie == null)
        {
            // 没有就添加
            cookie = new HttpCookie("HongHu");
    
            cookie.Values["username"] = "我的用户名";
            cookie.Values["password"] = "我的用户密码";
            cookie.Expires = DateTime.Now.AddDays(31);
            //cookie.Secure = true;
    
            Response.Cookies.Add(cookie);
        }
    
        Response.Write(String.Format("username:{0}<br />", cookie.Values["username"]));
        Response.Write(String.Format("password:{0}<br />", cookie.Values["password"]));
    }


    知识改变命运,奋斗成就人生!
    2010年1月9日 6:11
    版主
  • 你好!

    我用你的代码去掉了加密是可以的。

    protected void Page_Load(object sender, EventArgs e)
    
    {
    
        HttpCookie cookie = Request.Cookies["HongHu"];
    
    
    
        if (cookie == null)
    
        {
    
            // 没有就添加
    
            cookie = new HttpCookie("HongHu");
    
    
    
            cookie.Values["username"] = "我的用户名";
    
            cookie.Values["password"] = "我的用户密码";
    
            cookie.Expires = DateTime.Now.AddDays(31);
    
            //cookie.Secure = true;
    
    
    
            Response.Cookies.Add(cookie);
    
        }
    
    
    
        Response.Write(String.Format("username:{0}<br />", cookie.Values["username"]));
    
        Response.Write(String.Format("password:{0}<br />", cookie.Values["password"]));
    
    }
    
    


    知识改变命运,奋斗成就人生!

     这就不对了呀,你说是可以的。用你的代码如下:
    protected void Page_Load(object sender, EventArgs e)

    {

        HttpCookie cookie = Request.Cookies["HongHu"];



        if (cookie == null)

        {
          //接下来的操作
        }
    }

    之前在本地磁盘上已经存储了Cookie,但运行的时候还是cookie 为null   你怎么说是可以的呢?
    2010年1月9日 6:55