dmr*_*dmr 17 c# asp.net cookies google-chrome google-translate
我试图让用户设置他们的默认语言.当用户从下拉菜单中选择一种语言并点击"保存"时,会重新加载该页面并更新Google翻译Cookie,因此该网站会被翻译为用户选择的语言.在FF和IE上,用户可以使用下拉列表设置语言,然后将其更改为其他语言.但是,在Chrome上,用户可以第一次设置语言,但是无法将其更改为其他语言.
此问题仅出现在测试和测试版网站上 - 我可以更新本地主机上的语言.
我正在使用Chrome版本38进行测试.
这是第一次设置Cookie的代码,也是用户单击"保存"时更新的代码.
public void ImplementUserPreferences(UserPreferences prefs)
{
//examples of prefs.GoogleTranslateDefaultLanguage:
// af, sq, ar, sp, is....
HttpCookie languageCookie = new HttpCookie("googtrans", "/en/" + prefs.GoogleTranslateDefaultLanguage);
AddOrSetCookie(languageCookie, "googtrans");
}
private void AddOrSetCookie(HttpCookie cookie, String cookieName)
{
if (System.Web.HttpContext.Current.Request.Cookies[cookieName] == null)
{
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
else
{
System.Web.HttpContext.Current.Response.Cookies.Set(cookie);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 1
检查响应标头,但我不认为当您的地址是 localhost 时,cookie 不会在请求中发送。因此,根据您的逻辑,由于请求不存在 cookie,因此每次都会更新首选项。
HttpResponse 不会发回请求中传入的 cookie,它只会添加您要在响应中设置的 cookie。因此,当您在 Beta 站点中进行测试时,设置后会收到带有 cookie 的请求,并将调用 else 条件中的代码。HttpCookieCollection.Set(...) 方法不添加 cookie,仅更新集合中已存在的 cookie。我会将代码更改为如下所示:
private void AddOrSetCookie(HttpCookie cookie, String cookieName)
{
if (System.Web.HttpContext.Current.Request.Cookies[cookieName] == null
|| System.Web.HttpContext.Current.Request.Cookies[cookieName].Value != cookie.Value )
{
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
781 次 |
最近记录: |