2012-01-30 73 views
5

成功登錄後,我想保存包含用戶名的cookie。保存cookie時會話丟失

Cookie正確保存並正確加載用戶名,但會話丟失!

中檢索用戶名的代碼是:

if (Request.Cookies["userName"] != null) 
{ 
    txtEmail.Text = Request.Cookies["username"].Value; 
    chkRemember.Checked = true; 
} 

的代碼保存的用戶名是:

HttpCookie aCookie = new HttpCookie("username"); 
aCookie.Value = txtEmail.Text; 
aCookie.Expires = DateTime.Now.AddYears(5); 
Response.Cookies.Add(aCookie); 

任何幫助,將不勝感激,謝謝

+3

你是什麼意思的會話? ASP.NET會話?或者形成驗證會話?你還有什麼行爲準確表演?你在關閉瀏覽器嗎? – 2012-01-30 15:58:33

+0

從登錄表單導航到下一個表單時,ASP.NET會話正在重置。這只是在添加上面的代碼之後。 – 2012-01-30 16:18:05

+0

上面的代碼是在登錄表單中,還是在其他地方? – M3NTA7 2012-01-30 17:18:53

回答

1

我最近看到一篇文章,建議在頁面名稱中使用下劃線會導致餅乾的問題,我還沒有研究這一點,但它可能是值得一試。

另外,如果用戶不選擇被記住,你是否清除你的cookies?

我最近在MSDN上看到一箇舊的例子,顯示刪除方法,將垃圾你的會議... read the article

如果是這樣,一定要只刪除登錄的cookie,否則你可能會丟失包含sessionid的cookie。

A(非常)快速翻譯成文章的代碼CSHARP:

for (int i = 0; i < limit; i++) 
    { 
     cookieName = Request.Cookies[i].Name; 
     aCookie = new HttpCookie(cookieName); 
     aCookie.Expires = DateTime.Now.AddDays(-1); 
     Response.Cookies.Add(aCookie); 
    } 

隨着溶液中加入對cookie名稱的支票。

for (int i = 0; i < limit; i++) 
    { 
     cookieName = Request.Cookies[i].Name; 
     if (cookieName == "username") 
     { 
      aCookie = new HttpCookie(cookieName); 
      aCookie.Expires = DateTime.Now.AddDays(-1); 
      Response.Cookies.Add(aCookie); 
     } 
    } 

另外不要忘記你可以使用Cookie中的子項。

+0

非常感謝你,當我'不記得'unsername cookie時會話變量正在丟失,我刪除了所有的cookie對象,包括會話ID。再次感謝你。 – 2012-01-31 10:11:08

2

位野生出手,但你是從https轉移到http?例如。登錄表單是https,下面的頁面是http

如果是這樣,大多數瀏覽器都會丟棄會話cookie。

感謝, 弗蘭

+0

不使用https,這不適用。謝謝。 – 2012-01-31 09:00:27