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

dmr*_*dmr 17 c# asp.net cookies google-chrome 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 1

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

HttpResponse 不会发回请求中传入的 cookie,它只会添加您要在响应中设置的 cookie。因此,当您在 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);
    }

}
Run Code Online (Sandbox Code Playgroud)