繁体   English   中英

如何在每个请求 Asp.net mvc 上处理 Session

[英]How to handle Session on each request Asp.net mvc

我有一个 web 应用程序在移动应用程序(WebView)中运行。当用户打开应用程序时,移动应用程序通过请求向我发送电话的语言信息。 由于语言值仅出现在第一个请求中,然后被删除,因此我必须将其存储起来以供后续请求使用。 我在 global.asax 上尝试过 PreRequestHandlerExecute 和 Application_AcquireRequestState。 我控制 Session。 如果是 null 我从请求中获取值,如果不是 null 我从 session 中获取值。 但似乎 session 总是 null 并且总是从请求中获取值。 有什么想法会很有帮助吗? 感谢提前。

var dilKodu = Request.Headers.GetValues("languageCode");

        CultureInfo ci;
        if (dilKodu != null)
        {

            //I set culture from request if it is not null.
            ci = new CultureInfo(dilKodu[0].ToString());
            this.Session["Culture"] = ci;
        }
        else
        {
            if (HttpContext.Current.Session != null)
            {
                //I get culture from Session if its set before.
                ci = (CultureInfo)this.Session["Culture"];

                if (ci == null)
                {
                    string langName = "tr";
                    //If culture exist neither Session nor Request

                    ci = new CultureInfo(langName);
                    this.Session["Culture"] = ci;
                }
            }
            else
            {

                ci = new CultureInfo("tr");
            }

        }

        Thread.CurrentThread.CurrentUICulture = ci;
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);

按照你的代码,你总是会进入第一个 if 语句,它将读取并设置代码形式dilKodu

你的代码应该更像这样

if (HttpContext.Current.Session != null)
{
  ci = (CultureInfo) this.Session["Culture"];
  if (ci == null)
  {
    var langName = Request.Headers.GetValues("languageCode");
    Session["dilG"] = langName;
    ci = new CultureInfo(langName);
    Session["Culture"] = ci;
  }
}
else
{
  Session["dilG"] = "session hazır değil tr yapıldı";
  ci = new CultureInfo("tr");
}

基本上,您的 if 语句错误地设置了您要执行的操作。

此外,最好将 session 对象保持小,即只需将 langName 存储在 session 中,然后每次都从中创建 CultureInfo,而不是存储 CultureInfo。

这是 MVC web 应用程序吗? 如果是这样,您可以尝试将值保存在Controller.TempData 属性中。

所以不要这样做this.Session["culture"] = ci; 您将添加到 TempData 属性TempData.Add("culture", ci); . 这将使文化可用于下一个请求。 您只需要确保在每个请求中重新添加ci值,以使该值在您需要时持续存在。

TempDataDictionary 的文档: https://docs.microsoft.com/en-us/dotnet/api/system.web.mvc.tempdatadictionary?view=aspnet-mvc-5.2

这是因为 web.config 中的设置。

<httpCookies requireSSL="true" httpOnlyCookies="true"/>

我试图保护 cookie,但它阻止了会话。 我删除它,现在一切正常。 但我仍然需要找到一种方法来保护 cookies。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM