c# - 无法读取cookie

标签 c# asp.net cookies culture

我在我的网站上使用 asp.net 文化来以不同的语言显示网站,即荷兰语 (nl) 和法语 (fr)。该站点有一个按钮,可以通过将 ?lang=nl 添加到站点的 url 来将站点更改为另一种语言。当您更改语言时,会保存一个 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();
    }
}

谁能告诉我我做错了什么?

编辑: 我忘了告诉我这段代码在我的本地电脑上测试时工作正常,但部署在服务器上时却不起作用。

最佳答案

我认为您的错误在于您处理 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();
}

关于c# - 无法读取cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496721/

相关文章:

c# - 如何在可以再次按下按钮后实现延迟

c# - Unity IoC 解析并注入(inject)一组实现通用接口(interface)的类

javascript - 无法从 JavaScript 访问 cookie,但在 HTTP header 中可见

cookies - 在 Cypress 中跨测试保留 cookie/localStorage session

c# - 追踪 NaN float 的原因

c# - P/调用 const char 指针和 int 引用

c# - ASP.net session 登录

.net - 我什么时候应该考虑使用 SessionState 来保留我的变量值?

asp.net - 从 asp.net 4 中的资源文件获取文本

ios - Swift:如何为进一步的 http 请求记住 cookie