我有一个关于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