Wierd asp.net会话修复

时间:2016-09-11 05:16:04

标签: c# asp.net session

我最近遇到了一个奇怪的问题,asp.net会话实际上发生在下面的示例代码中。

创建会话的代码(Login.aspx.cs)

public partial class Login : System.Web.UI.Page
{
    protected async void btnLogin_Click(object sender, EventArgs e)
        {

            await request_login();
            if (canLogin == true)
            {
                Response.Redirect("Dashboard.aspx");
            }
         }

   private async Task request_login()
        {
            // call web service with httpClient
               Session["key"] = "session object to be stored";
        }
}

调用会话的代码(Dashboard.aspx.cs)

public partial class Dashboard : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            String sessionDetails = Session["key"] as String;
        }
     }

当我运行这段代码时,我从Session["Key"]得到一个空字符串。我设法通过在home.aspx文件中添加一个虚拟会话来解决这个问题(这实际上是网站的默认页面)。

Home.aspx.cs

public partial class Home : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //wierd fix that allows session access
            Session["home"] = "fromHome";
        }
    }

添加Session["home"]后,我的Session["key"]能够完美地运作。为什么会这样?不能Session["key"]能够完美地工作而无需在home.aspx.cs中添加Session["home"]吗?

1 个答案:

答案 0 :(得分:1)

试试这个:

public partial class Login : System.Web.UI.Page
{
    protected async void btnLogin_Click(object sender, EventArgs e)
        {

            await request_login();
            if (canLogin == true)
            {
                Response.Redirect("Dashboard.aspx",false);
            }
         }

   private async Task request_login()
        {
            // call web service with httpClient
               Session["key"] = "session object to be stored";
        }
}

所以这不会中止线程。

如果您想知道发生这种情况的确切原因,请访问: http://weblogs.asp.net/bleroy/Don_2700_t-redirect-after-setting-a-Session-variable-_2800_or-do-it-right_2900_