cookie创建如何工作?

时间:2011-07-05 09:29:55

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

我正在开发Cookie。我按照http://asp.net-tutorials.com/state/cookies/教程。 这里Page_Load检查BackgroundColor cookie,如果它存在,它将获取值并在onselectedindexchanged事件上设置背景颜色,否则将创建一个新的cookie。

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

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

那么cookie创建是如何工作的?由于cookie名称相同,为什么Green Cookie不替换Red cookie?

1 个答案:

答案 0 :(得分:2)

查看示例中的代码,看起来它看起来不像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之前更改下拉列表的选定值。