在Chrome中更新Google翻译cookie的问题

17

我正在尝试允许用户设置默认语言。当用户从下拉列表中选择一种语言并点击“保存”时,页面将重新加载并更新Google翻译cookie-因此该网站将被翻译成用户选择的语言。在Firefox和IE上,用户可以使用下拉菜单设置语言,然后将其更改为另一种语言。但是在Chrome上,用户可以第一次设置语言,但随后无法将其更改为其他语言。

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

我正在使用Chrome 38版本进行测试。

以下是第一次设置Cookie以及用户点击保存后更新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然后重新添加一个新的值? - user927976
是的,我试过了。没有帮助。 - dmr
如果保存下载会话cookie,他们就必须清除它们。或者你可以设置它们快速刷新,但这会伤害那些第一次就做对的用户。 - user5306470
2个回答

1
检查响应头,但是我不认为当您的地址为localhost时cookie不会在请求中发送。因此,根据您的逻辑,由于请求中没有cookie存在,所以偏好设置将每次更新。
HttpResponse不会发送回来在请求中收到的cookies,它只会添加您要在响应中设置的cookies。因此,在测试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);
    }

}

当我检查响应头(Chrome开发者工具)时,发现cookie列表中有一个Google翻译的cookie:googtrans=/en/ca; - dmr
cookie 出现在本地主机和测试/测试站点的响应头中。 - dmr

0

我正在使用cookies,因为Google翻译是通过cookie实现的,而我正在覆盖该cookie。 - dmr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接