我在PC上设置了一个标准的ASP.NET Webforms应用程序。登录页面存储3个会话变量;用户名,密码和重定向。
从我看到的情况来看,我可以使用Session["user"] = username
或Session.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。
这让我感到困惑!
答案 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>