在内容页面之间遍历时,cookie值会消失

时间:2011-09-22 06:13:50

标签: c# asp.net cookies

在我的应用中。有一个登录机制,用于保存一个cookie,其中包含刚刚登录的用户的信息

     private void CreateCookie(LoginEventArgs args)
     {
         HttpCookie cookie = new HttpCookie("user");
         cookie.Values["name"] = args.User_Name;
         cookie.Values["id"] = args.ID;
         cookie.Expires = DateTime.Now.AddDays(1);            
         Response.Cookies.Add(cookie);
     }

在我的母版页面加载我执行检查以查看此cookie是否存在:

   HttpCookie cookie = Request.Cookies["user"] ;
   if( (cookie != null) && (cookie.Value != ""))  
   {
        if (Session["user"] == null)
            Login_Passed(this, new LoginEventArgs(cookie.Values["name"].ToString(), int.Parse(cookie.Values["id"])));
   }

现在,如果我登录(创建一个cookie),关闭浏览器,然后运行我的应用程序。再次cookie 存在它的值是正确的并且用户“自动”登录。

如果我首先从启动内容页面重定向到不同的内容页面 Cookie值也完好无损,

问题是当我第二次重定向回不同的内容页面时, 主页加载,进行检查 cookie存在,但值被删除...

关于为什么会发生这种情况的任何想法?

也许我退出的方式可能就是这个问题的原因:

当我退出时,我创建了一个与1天前相同名称的cookie。

   private void Remove_Cookie()
   {
        HttpCookie cookie = new HttpCookie("user");
        cookie.Expires = DateTime.Now.AddDays(-1);
        Response.Cookies.Add(cookie); 
   }

在iv'e描述的情况下,我没有正式退出,我只是结束我的应用程序,所以这不应该 有任何影响。

4 个答案:

答案 0 :(得分:16)

哦,问题是不可想象的 特别感谢Peter Bromberg

http://www.eggheadcafe.com/tutorials/aspnet/198ce250-59da-4388-89e5-fce33d725aa7/aspnet-cookies-faq.aspx

在“消失的Cookie”一文中的部分

作者说如果你有关于Response.Cookies [“cookie_name”]的手表 浏览器会创建一个新的空cookie来覆盖您的cookie。

我使用了这样的手表,这使我的饼干松散了它的价值,当我把它取下时,饼干保留了它的价值。

道德是不要观看Response.Cookies [“”] 我也读过其他一些帖子,如果你检查

 if( Response.Cookies["cookie_name"] != null    )  
例如,它也被覆盖了。

答案 1 :(得分:7)

重申并以已经陈述的内容为基础(是的,我知道这是一个4岁的问题)我发现最好建立一个实用程序来处理这个 - 主要是因为我想经常检查那个特定的cookie。

这不会触及响应,但只能从请求中读取。

    public static HttpCookie GetCookie(string cookieName)
    {
        HttpCookie rqstCookie = HttpContext.Current.Request.Cookies.Get(cookieName);
        /*** NOTE: it will not be on the Response!
         *   this will trigger the error noted in the original question and
         *   create a new, empty cookie which overrides it
         *   
            HttpCookie respCookie = HttpContext.Current.Response.Cookies.Get(cookieName);
         * 
         */
        if (rqstCookie != null && !String.IsNullOrEmpty(rqstCookie.Value))
        {
            // is found on the Request
            return rqstCookie;
        }
        else
        {
            return null;
        }
    }

原则进行的拇指

始终从请求中读取并写入响应。

谢谢伊兰!这篇文章正是我所需要的

答案 2 :(得分:0)

尝试以下方法:

  • 如果您在本地计算机上进行开发,请将您的应用程序放在一些免费网页上,这样就不会有“特殊处理”,因为您在本地主机上。
  • 如果您已经在网络服务器上,如果重定向位于两个不同的域之间,您可能需要搜索谷歌的“同源策略”或阅读:http://en.wikipedia.org/wiki/Same_origin_policy(文档会谈关于javascript,但它也适用于cookies)。

答案 3 :(得分:0)

使用以下方法从Cookie中获取价值:

    <div id="sort-filter">
        <div id="sort">
                        <select id="price-sort" class="select-css form-control long">
                <option selected disabled class="s-title"> Sort </option>
                <option data-sorttype="dec" value="price">£ Low To High</option>
                <option data-sorttype="ass" value="price">£ High To Low</option>

            </select>

        </div>
        <div class="filters">
                    <select class="filter-select select-css short" value-group="sizes" id="sizes">
                    <option selected disabled class="s-title"> Size </option>
                      <option value="*">All</option>
                      <option value=".XS">XS</option>
                      <option value=".S">S</option>
                      <option value=".M">M</option>
                      <option value=".L">L</option>
                      <option value=".XL">XL</option>
                      <option value=".XXL">XXL</option>
                    </select>
    </div>
    </div>

<div class="container">

    <ul class="grid cs-style-3">
        <div class="grid-sizer"></div>

            <li class="grid-item XS Male Beige Bags Mint">
                <a href="link" class="animsition-link" data-animsition-out-class="fade-out-left-lg">
                    <figure style="background-image: URL(image.jpg);">
                        <img src="/image2.jpg" alt="hat sale item">
                </figure>
                <div id="pro-deets">
                <h3>hat sale item</h3>
                        <span id="price" class="holderpage">
                            £<span class="price t-price">3</span>

                        </span>
                </div></a>
            </li>

            <li class="grid-item L Female Brown Tops Worn">
                <a href="link" class="animsition-link" data-animsition-out-class="fade-out-left-lg">
                    <figure style="background-image: URL(image.jpg);">
                        <img src="/image2.jpg" alt="product no sale no new">
                </figure>
                <div id="pro-deets">
                <h3>product no sale no new</h3>
                        <span id="price" class="holderpage">
                            £<span class="price t-price">40</span>

                        </span>
                </div></a>
            </li>

            <li class="grid-item L Female Brown Tops Worn New" data-category="New">
                <a href="link" class="animsition-link" data-animsition-out-class="fade-out-left-lg">
                    <figure style="background-image: URL(image.jpg);">
                        <img src="/image2.jpg" alt="Skirt">
                </figure>
                <div id="pro-deets">
                <h3>Skirt</h3>
                        <span id="price" class="holderpage">
                            £<span class="price t-price">10</span>

                        </span>
                </div></a>
            </li>

            <li class="grid-item XS Male Beige Bags Mint Sale" data-category="Sale">
                <a href="link" class="animsition-link" data-animsition-out-class="fade-out-left-lg">
                    <figure style="background-image: URL(image.jpg);">
                        <img src="/image2.jpg" alt="Jacket">
                </figure>
                <div id="pro-deets">
                <h3>Jacket</h3>
                        <span id="price" class="holderpage">
                            £<span class="price sale">30</span>
                            <span class="price">£<span class="t-price">20</span></span>
                        </span>
                </div></a>
            </li>

        </ul>
        </div>