【问题标题】:Problems updating Google Translate cookie in Chrome在 Chrome 中更新谷歌翻译 cookie 时出现问题
【发布时间】:2015-01-14 11:41:03
【问题描述】:

我试图让用户设置他们的默认语言。当用户从下拉菜单中选择一种语言并点击“保存”时,页面会重新加载,谷歌翻译 cookie 也会更新——因此网站会被翻译成用户选择的语言。在 FF 和 IE 上,用户可以使用下拉菜单设置语言,然后将其更改为另一种语言。然而,在 Chrome 上,用户可以在第一次设置语言,但随后无法将其更改为其他语言。

这个问题只出现在测试和 beta 站点上——我可以在我的本地主机上更新语言。

我正在使用 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);
    }
}

【问题讨论】:

  • 您是否尝试过 System.Web.HttpContext.Current.Response.Cookies[cookieName] = cookie...Cookies[cookieName].Value = cookie.Value,或者删除 cookie 并重新添加新值?
  • 是的,试过了。没用。
  • 如果保存下载一个cookie,他们将不得不清除它们。或者您可以将它们设置为快速刷新,但这会伤害第一次正确使用它的用户。

标签: c# asp.net google-chrome cookies google-translate


【解决方案1】:

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

HttpResponse 不会发回请求中的 cookie,它只会添加您要在响应中设置的 cookie。因此,当您在 beta 站点中进行测试时,会在设置 cookie 后发出请求,并在 else 条件下调用代码。 HttpCookieCollection.Set(...) 方法不会添加 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);
    }

}

【讨论】:

  • 当我检查响应标头(Chrome 开发者工具)时,cookie 列表中有一个谷歌翻译 cookie:googtrans=/en/ca;
  • cookie 显示在 localhost 和测试/beta 站点的响应标头中
【解决方案2】:

请不要使用 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

【讨论】:

  • 我正在使用 cookie,因为谷歌翻译是使用 cookie 实现的,并且我正在覆盖该 cookie。
猜你喜欢
  • 2011-08-29
  • 1970-01-01
  • 2011-05-22
  • 2020-09-25
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多