在Global.asax中获得全局价值

时间:2016-01-08 10:17:21

标签: asp.net session global-asax

我有一个关于global.asax的问题,在文件global.asax中我希望获得我已经在login.aspx中设置会话的变量会话,而当我得到变量会话时,它的错误:对象引用未设置为对象的实例

global.asax的代码:

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
     string SID = Cookies.GetCookie().SessionID; // error at this point
     if (ShoppingCart.CheckIsSessionActive() == false)
     {
         Cookies.DeleteCookie();
         FormsAuthentication.SignOut();
                Response.Redirect("../expired.htm");
     }
}

login.aspx.cs

中的代码设置会话
  protected void btnLogin_Click(object sender, EventArgs e)
  {
      Cookies.DeleteAllCookies();

      var sess = Cryptography.SetSID();

      Cookies cookies = new Cookies();
      cookies.UserID = (int)row["Id"];
      cookies.UserName = txtLoginID.Text;
      cookies.SessionID = sess;

      Cookies.SetCookie(cookies);

      Response.Redirect("~/Admin/Lounge.aspx");
  }

但如果我停用global.asax的代码并直接发送到文件lounge.aspx,并在文件Lounge.aspx.cs中获取值,就像在文件global.asax中一样工作

lounge.aspx.cs的代码:

  protected void Page_Load(object sender, EventArgs e)
  {
        int UserID = Cookies.GetCookie().UserID;
        string SID = Cookies.GetCookie().SessionID;
  }

函数GetCookie()的代码:

  public static Cookies GetCookie()
    {
        Cookies cookies = Cache.Get("Cookie" + HttpContext.Current.User.Identity.Name) as Cookies;

        if (cookies == null)
        {
            cookies = GetCookieToCache();
            Cache.Insert("Cookie" + HttpContext.Current.User.Identity.Name, cookies, 15);
        }

        return cookies;
    }

    private static Cookies GetCookieToCache()
    {
        Cookies cookies = new Cookies();
        HttpCookie HttpCookie = HttpContext.Current.Request.Cookies[COOKIESNAME];

        if (HttpCookie != null)
        {
            Hashtable hTable = new Hashtable();
            HMB.Components.Utility.DecodeParameters(HttpCookie.Value, out hTable);

            cookies.UserID = Convert.ToInt32(Cryptography.TDESDecrypt(hTable["1"].ToString()));
            cookies.UserName = Cryptography.TDESDecrypt(hTable["2"].ToString());
            cookies.SessionID = Cryptography.TDESDecrypt(hTable["3"].ToString());

        }


        return cookies;
    }

THX

0 个答案:

没有答案