会话变量不传播

时间:2015-08-05 12:00:08

标签: c# asp.net session webforms

我在PC上设置了一个标准的ASP.NET Webforms应用程序。登录页面存储3个会话变量;用户名,密码和重定向。

从我看到的情况来看,我可以使用Session["user"] = usernameSession.Add("user", username);来设置变量。

一旦设置了变量,我就会重定向到另一个执行进一​​步身份验证检查的页面。

在接收页面中,我有以下

protected void Page_Load(object s, EventArgs e)
{
   if (!IsPostBack)
   {
      var user = (string)(Session["user"]);
   } 
}

当我来看用户时,它是空的。

我设置的所有内容都是开箱即用的值。

更多信息

在我的来电者中,会话设置如下

 if (user.UserName == "admin")
 {
     Session.Add("user", UserName.Text);
     Session.Add("pass", Password.Text);
     Session.Add("redir", Request.QueryString["ReturnUrl"]);
     Response.Redirect("SecondPage.aspx", false);
 }

在我的SecondPage.aspx

    if (!IsPostBack)
    {
        ReturnUrl = (string)(Session["redir"]);
        Username = (string)(Session["user"]);
        Password = (string)(Session["pass"]);
    }

(ReturnUrl,用户名和密码只是简单的get; set properties)

**附加

为了确保我没有丢失弹珠,我已经进行了两次额外的测试。

首先,我在第一页的Page_Load中添加了以下内容

Session["fish"]="chips";

然后我在第2页和“筹码”节目中看到了这一点。

接下来,我创建了一个静态类并分配了该类的属性,并尝试在第2页中读取它们 - 尽管在重定向到page2之前设置(并测试)了它们,但它们都是null。

这让我感到困惑!

1 个答案:

答案 0 :(得分:1)

我假设您的if语句设置会话变量是否在按钮单击内?否则,您将立即将它们设置为空文本框的值。简化您的代码以测试是否存在实际问题。把它放在每个Page_Load中(不在!IsPostBack中)。

第一页

Session["user"] = "test user";

第二页

//set breakpoint here
var user = Session["user"].ToString();

这将告诉您是否存在实际问题,或者您尝试使用它的方式是否存在问题。还要确保web.config文件中的会话状态设置为“inproc”。

<system.web>
      <sessionState mode="InProc"
                    timeout="20"/>
      </sessionState>
</system.web>