我工作的公司正在爲我們的Intranet軟件在經典ASP程序和ASP.NET程序之間進行轉換。最終,所有內容都將用ASP.NET編寫,但由於時間限制,仍然有許多使用傳統ASP的程序。失去經典ASP和ASP.NET之間的會話
爲了彌補,我們編寫了允許經典ASP程序和ASP.NET程序之間的重定向和自動登錄的功能。不過,我已經開始看到一個問題,就是爲我們的ASP.NET軟件保持會話狀態。如果用戶使用ASP.NET程序,然後在傳統的ASP程序中工作,然後返回到該ASP.NET程序,通常情況下,用戶對ASP.NET程序的身份驗證仍然存在,但用戶的會話在程序中執行某個功能時會導致錯誤。
我試圖捕獲global.asax的Session_End
事件中會話狀態的丟失,該事件會將用戶重定向到登錄頁面,但這不起作用。有沒有人遇到類似的問題,用戶在經典的ASP和ASP.NET之間來回移動並丟失會話?這就是我真正的問題嗎?這是我唯一可以看到的問題。
編輯
這是我們做的用戶從傳統的ASP頁面重定向到一個ASP.NET頁面。
我們根據userID和日期創建一個MD5散列,並通過查詢字符串將其發送到redirect.aspx頁面。從那裏,aspx頁面根據userId和日期創建它自己的MD5,它們都通過查詢字符串傳遞。如果2個哈希值相同,則用戶通過身份驗證,並加載該程序。這裏有一個例子:
傳統的ASP:
strDate = Year(Now()) & right("0" & Month(Now()), 2) & right("0" & Day(Now()), 2)
key = MD5(SessionUserID & strDate)
Response.Redirect "/redirect.aspx?key="&key&"&lpid="&ProgramID&"&unum="&SessionUserNum&"&uid="&SessionUserID&"&gid="&SessionGroupID
Redirect.aspx:
string key = Request.QueryString["key"];
//SetDesignModeState Variables:
if (getMd5Hash(Request.QueryString["uid"] + DateTime.Today.ToString("yyyyMMdd")) == key)
{
Session["SessionGroupID"] = Request.QueryString["gid"];
Session["SessionUserNum"] = Request.QueryString["unum"];
Session["SessionUserID"] = Request.QueryString["uid"];
string appID = Request.QueryString["lpid"];
FormsAuthentication.SetAuthCookie(Request.QueryString["uid"], false);
//redirect to ASP.NET page...
我編輯了我的帖子以獲取更多信息。 – Aaron 2010-05-05 18:52:53
編輯我自己的帖子作爲迴應... – Richard 2010-05-05 20:40:48
感謝您的建議...我會試試看,讓你知道它是如何工作的。 – Aaron 2010-05-06 13:08:01