回发之间的会话变量不匹配

时间:2013-04-05 23:55:01

标签: .net timeout postback session-variables tabbed-browsing

我正在存储一个会话变量,我将其用作各种数据访问调用的参数。首次创建会话时会设置此变量,并且用户可以根据他们有权访问的资源对其进行更改。例如,当用户首次登录其默认会话值时,可能会将其设置为“1”。在页面的上角是他们有权访问的所有选项的下拉列表,并且更改它会更改会话变量... 1,2,3,4 ...等。

问题是由于以下原因之一,此会话变量可能会在回发之间发生变化:

  1. 会话超时,会话使用默认值1
  2. 重新创建会话
  3. 用户打开两个选项卡/浏览器窗口并在一个选项卡上更改它,然后切换回另一个页面使用“1”表示值
  4. 这会导致页面上的控件变得“陈旧”,并且回发功能不正常。依赖于事件处理程序中的会话变量的按钮单击事件可能不是“预期”事件,并且界面具有误导性。

    我希望能够做的是确定会话变量的值是否在回发之间发生了变化,以及它是否已重定向到同一页面,导致它使用新的会话变量值重新呈现,并给出用户清楚地表明每个回发实际上做了什么。

    有什么想法吗?

2 个答案:

答案 0 :(得分:0)

为什么不使用cookie来存储该变量?我认为你的两个问题都会得到解决。

答案 1 :(得分:0)

我最终做的是在我的母版页中添加一个隐藏字段,然后将其放在后面的代码中:

        if (!Page.IsPostBack)
        {
            //SelectedID comes from masterpage property (Session variable)
            hiddenField.Value = SelectedID.ToString();

            ...
        }
        else
        {
            int selectedId = Int32.Parse(hiddenField.Value);
            if (selectedId != SelectedID)
            {
                Response.Redirect(Request.RawUrl);
            }
        }