[英]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.