在 Chrome 中更新谷歌翻译 cookie 时出现问题

本文关键字:问题 cookie 翻译 Chrome 更新 谷歌 | 更新日期: 2023-09-27 18:30:36

我正在尝试允许用户设置其默认语言。当用户从下拉列表中选择一种语言并单击"保存"时,页面将重新加载并更新谷歌翻译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);
    }
}

在 Chrome 中更新谷歌翻译 cookie 时出现问题

检查响应标头,但我不相信当您的地址是本地主机时,cookie不会在请求中发送。因此,根据您的逻辑,首选项每次都会更新,因为请求不存在 cookie。

HttpResponse 不会发回请求中出现的 cookie,它只会添加您要在响应中设置的 cookie。因此,当您在测试版站点中进行测试时,设置后会有一个带有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);
    }
}

请不要使用cookie - 这就是为什么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)