Session在ASP.NET中为null

时间:2016-05-13 08:04:28

标签: c# asp.net session

我的应用程序有会话修复漏洞。要修复该漏洞,我将在登录后更改会话ID。

我在不同文件夹Master和Transaction中拥有以下网页。

~/Master/Login.aspx:验证凭据后,我正在设置

Response.Cookies["ASPFIXATION"].Value ="xyz";
Session["ASPFIXATION"] = "xyz"

并重定向到〜/ Master / Home.aspx

~/Master/Home.aspx:在此页面中,我使用页面加载事件上的cookie值检查会话值。

string cookie_value = string.Empty;
string session_value = string.Empty;
if (Request.Cookies["ASPFIXATION"] != null)
    cookie_value = Request.Cookies["ASPFIXATION"].Value;
if (HttpContext.Current.Session["ASPFIXATION"] != null)
    session_value = HttpContext.Current.Session["ASPFIXATION"].ToString();
if (cookie_value != g_SessionFix)
{
    if (Request.Cookies["ASP.NET_SessionId"] != null)
    {
        Response.Cookies["ASP.NET_SessionId"].Value = null;
        Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddDays(-1);
    }
    if (Request.Cookies["ASPFIXATION"] != null)
    {
        Response.Cookies["ASPFIXATION"].Value = null;
        Response.Cookies["ASPFIXATION"].Expires = DateTime.Now.AddDays(-1);
    }
    Response.Redirect("~/Master/Login.aspx", false);
}

此处会话具有值并且已经过验证。

~/Transaction/Report.aspx:如果我重定向到此页面并且必须在此页面加载中检查相同的会话和cookie值逻辑。但是,此处HttpContext.Current.Session["ASPFIXATION"]的值为nullHttpContext.Current.Session.IsNewSession的值也为true

1 个答案:

答案 0 :(得分:0)

尝试在读取值后重新分配值,有时会在从会话中读取后清除值:

    if (Request.Cookies["ASPFIXATION"] != null)
    {
        cookie_value = Request.Cookies["ASPFIXATION"].Value;
        Request.Cookies["ASPFIXATION"].Value = cookie_value;
    }

    if (HttpContext.Current.Session["ASPFIXATION"] != null)
    {
        session_value = HttpContext.Current.Session["ASPFIXATION"].ToString();
        HttpContext.Current.Session["ASPFIXATION"] = session_value;
    }

如果它仍然不起作用,那么你还有另外一个选择, 如果您的会话数据不是保密的,那么尝试在查询字符串中传递它,并在页面重定向中检索此值。

Response.Redirect("~/Master/Login.aspx?data=" + session_value +");