【问题标题】:Session Variable Mismatch Between Postback回发之间的会话变量不匹配
【发布时间】:2013-04-05 23:55:00
【问题描述】:

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

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

  1. 会话超时,导致会话使用默认值 1 重新创建自己
  2. 用户打开两个选项卡/浏览器窗口并在一个选项卡上对其进行更改,然后切换回另一个使用“1”作为值呈现的页面

这会导致页面上的控件变得“陈旧”并且回发行为不正确。在其事件处理程序中依赖于会话变量的按钮单击事件可能不是“预期”事件,并且界面具有误导性。

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

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我不相信这会解决多个选项卡/浏览器窗口的问题,因为第一个 cookie 将由一个选项卡生成,然后由另一个选项卡更改,那么原始选项卡似乎仍然是用原始 cookie 渲染,对吗?
    【解决方案2】:

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

            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);
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      相关资源
      最近更新 更多