在Chrome中更新Google翻译Cookie时出现问题

时间:2014-11-17 14:20:46

标签: c# asp.net google-chrome cookies 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);
    }
}

2 个答案:

答案 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