cookie无法读取

时间:2013-12-10 14:10:34

标签: c# asp.net cookies culture

我在我的网站上使用asp.net文化以不同语言显示网站,即荷兰语(nl)和法语(fr)。该网站有一个按钮,通过将?lang = nl添加到网站的网址,将网站更改为另一种语言。当您更改语言时,会保存一个cookie,以便下次访问时保留语言。

由于某种原因,该网站不会看到cookie。 cookie在那里并被发送到服务器,我用fiddler检查。有时它的值为null,有时它是一个空字符串。

这是我在我的基页类中使用的代码:

protected override void InitializeCulture()
{
    if (!Page.IsPostBack)
    {
        string cookieLang = "";

        try
        {
            cookieLang = HttpContext.Current.Request.Cookies["UserSettings"]["lang"];
        }
        catch (Exception e)
        {
            Response.Write(string.Format("<!-- {0} -->", e.Message));
        }

        if (!string.IsNullOrEmpty(Request.QueryString["lang"]))
        {
            cookieLang = Request.QueryString["lang"].ToLower();
        }

        if (!string.IsNullOrEmpty(cookieLang))
        {
            string selectedCulture = cookieLang == "fr" ? "fr-BE" : "nl-BE";

            this.Lang = cookieLang;

            UICulture = selectedCulture;
            Culture = selectedCulture;

            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedCulture);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedCulture);


            Response.Cookies["UserSettings"]["­lang"]= Lang;
            Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(7);
        }


        base.InitializeCulture();
    }
}

有谁能告诉我这里我做错了什么?

修改 我忘了告诉我这个代码在我的本地电脑上测试时工作正常,但是当部署在服务器上时它不起作用。

2 个答案:

答案 0 :(得分:1)

我认为你的错误在于你如何处理cookie以及事件顺序。

  • 第1步:尝试从Cookie中获取文化名称。如果它存在,请记住它。
  • 第2步:尝试从查询字符串中获取文化名称。如果它存在,请记住它。
  • 第3步:根据之前的情况设置当前文化。
  • 步骤4:将文化名称保存在cookie中。

以下代码一直适用于我:

protected override void InitializeCulture()
{
    var cultureName = string.Empty;

    // Step 1
    var cookie = this.Request.Cookies["culture"];

    if (cookie != null)
    {
        cultureName = cookie.Value;
    }

    // Step 2
    var query = this.Request.QueryString["culture"];

    if (query != null)
    {
        cultureName = query;
    }

    // Step 3
    var culture = new CultureInfo(cultureName);

    Thread.CurrentThread.CurrentCulture = culture;
    Thread.CurrentThread.CurrentUICulture = culture;

    // Step 4
    this.Response.Cookies["culture"].Value = culture.Name;

    base.InitializeCulture();
}

答案 1 :(得分:0)

由于您的代码在本地而不是部署的服务器上运行,因此您也可以检查以下内容

  1. 检查是否相对分配了文化文件的路径。
  2. 然后初始化文化以在cookie中加载适当的文化信息。
  3. 希望这有帮助, 感谢。