【问题标题】:How cookie creation works?cookie 创建是如何工作的?
【发布时间】:2011-09-28 15:50:14
【问题描述】:

我正在研究 Cookie。我跟着http://asp.net-tutorials.com/state/cookies/ 教程。 此处 Page_Load 检查 BackgroundColor cookie,如果存在,它将获取值并设置背景颜色,否则在 onselectedindexchanged 事件上将创建一个新 cookie。

这里在第一次将cookie设置为红色后,我尝试再次将下拉值更改为绿色,因此控制流将首先到达Page_Load,它将获取cookie值红色并将背景颜色设置为Red ,接下来该控件将流向 ColorSelector_IndexChanged 并再次为 Green 创建一个名为 BackgroundColor 的新 cookie。

当我再次更改下拉值蓝色时,无论过期时间如何,新创建的绿色 Cookie 应该正确显示吗?因为当我将下拉菜单更改为绿色时,会创建并保存一个新的 cookie,但浏览器仍然是红色。

那么 cookie 创建是如何工作的呢?由于cookie名称相同,为什么这里没有绿色cookie替换红色cookie?

【问题讨论】:

  • 很明显的问题但是....你在写完新的cookie后刷新了页面吗?
  • @Fishcake 不,我只是简单地更改下拉值。
  • 基本上这不是一个很好的教程,但我的回答应该可以解决问题。

标签: c# asp.net cookies state-management


【解决方案1】:

查看示例中的代码,它似乎无法像 cookie 已经存在一样工作,它将下拉列表的值设置为 cookie 中保存的颜色。然后,当代码到达“ColorSelector_IndexChanged”时,下拉菜单的值已经被更改,因此 cookie 只是用相同的颜色重新创建。

在 page_load 代码中检查 PostBack,它应该如下工作:

    protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        if (Request.Cookies["BackgroundColor"] != null)
        {
            ColorSelector.SelectedValue = Request.Cookies["BackgroundColor"].Value;
            BodyTag.Style["background-color"] = ColorSelector.SelectedValue;
        }
    }
}

说明

这是因为在 asp.net 页面生命周期中,Page_Load 将在 SelectedIndexChanged 事件之前被调用,因此您在将下拉列表的选定值写入 cookie 之前将其更改。

【讨论】:

    猜你喜欢
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多