2011-03-16 47 views
5

我在Asp.net的登錄頁面出現了一個奇怪的問題,這個問題只發生在Safari上。在Safari和Asp.net中存在奇怪的問題

驗證用戶時,我從數據庫中獲取用戶名(數據庫中的字段爲UTF8)並將其保存在cookie中。問題是,當用戶有一個帶有特殊字符的名字時,我會被重定向到我沒有登錄的頁面。例如「Moller」工作正常,用戶登錄但不是「Møller」。

再次,這只是發生在Safari和當我有名字中的特殊字符。不工作的行是:Response.Cookies [「userInfo」] [「name」] = getNameFromUserid(userid);

這是我的代碼:

string userid = validUserWithEmail(TextBoxEmail.Text, TextBoxPassword.Text); 
if (userid != null) { 
    //VALID USER 
    Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(30); 
    Response.Cookies["userInfo"]["name"] = getNameFromUserid(userid); 

    FormsAuthentication.RedirectFromLoginPage(userid, CheckBoxPersistCookie.Checked); 
} 
else 
{ 
    //NOT A VALID USER SHOW A MESSAGE FOR THE USER OR SOMETHING 
} 
+0

這個任何想法? – Martin 2011-04-03 11:23:41

+0

Safari是Windows還是Mac/iOS版本?我與我的asp.net應用程序有相同的問題,但僅限於Mac版本的Safari。 – 2012-07-19 18:03:27

回答

6

Safari瀏覽器將不設置在他們的價值和其他瀏覽器非ASCII字符餅乾可以在它們的顯示非ASCII字符不可預測的。由於任何瀏覽器的cookie值都不允許使用分號,所以我建議使用UrlEncode/UrlDecode。

如果你是剛剛寫的cookie並沒有在現場讀取控制/顯示值放於URLDecode你也可以做這樣的事情:

ckCookie.Value = (Server.HtmlEncode(strSpecialCharacters)).Replace(";",""); 

這將確保滿弦被設置在cookie中,Safari,Chrome,Firefox和IE仍然可以識別HTML代碼,即使沒有;讀取時不需要解碼。

有關的cookie規範更長的回答,請參閱:Allowed characters in cookies

+0

感謝您的解釋!但現在的問題是,我得到了一個asp.net錯誤消息「一個潛在危險的Request.Cookies值從客戶端檢測到」,例如試圖在我的cookie中使用「Müller」編碼爲:「M&#252 」。我該如何解決這個問題? – Martin 2011-06-02 16:50:35

+3

解決方案似乎是使用UrlEncode來代替:http://madskristensen.net/post/Cookies-and-Unicode-characters.aspx – Martin 2011-06-02 17:02:02

+0

謝謝!你保存了我的截止日期!大聲笑! – 2013-06-06 14:02:35