我正在尝试允许用户设置其默认语言。当用户从下拉菜单中选择一种语言并点击“保存”时,会重新加载该页面并更新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);
}
}
答案 0 :(得分:1)
检查响应标头,但我不相信当您的地址是localhost时,cookie不会在请求中发送。因此,根据您的逻辑,首选项将每次更新,因为请求没有cookie存在。
HttpResponse不会发回请求中的cookie,它只会添加您在响应中设置的cookie。因此,当您在测试版网站中进行测试时,请求在设置完成后会附带cookie,并在其他情况下调用代码。 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);
}
}
答案 1 :(得分:0)
请不要使用cookies - 这就是html5包含本地存储的原因
有关本地存储的更多信息:http://www.html5rocks.com/en/tutorials/offline/storage
并针对您的方案:http://www.codeguru.com/csharp/.net/two-ways-of-passing-html5-web-storage-data-to-asp.net.htm
<顺便说一下:IE8也支持这些功能! (如下所示:http://caniuse.com/#search=local%20storage)