自定义标头中ID为的ASP.NET MVC会话
本文关键字:ASP NET MVC 会话 为的 ID 自定义 | 更新日期: 2023-09-27 17:59:50
在ASP.NET MVC中(无需编写太多代码)是否可以手动选择当前会话ID?我不是想创建自己的sessionId,而是想将sessionId存储在自定义标头中,而不是cookie或url中。我不介意我是否需要自己阅读标题,并在requestrongtart:中做这样的事情
Request.Session = new SessionState(Request.Headers["sessionId"]);
主要的是,我不想将会话状态存储在cookie中(因为cookie不会在本应与mvc应用程序对话的设备上启用),我也不想在客户端上解析url,然后重新发送插入到url中的sessionId的所有内容。
此外,如果我不能用本机会话对象做到这一点,我也不介意,我只需要一个快速简单的解决方案,在自定义标头中使用令牌,而不是cookie。
我知道你提到不想解析url,但使用带有路由的url似乎是一个简单快速的解决方案,请将参数添加到您的路由中:
在您的Global.asax 中
routes.MapRoute(
"SessionIdUrl",
"{sessionId}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
创建一个基本控制器并使SessionId可用于您的控制器:
public class BaseController : Controller
{
public string UrlSessionId { get; set; }
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
object sessionId = "";
if (filterContext.RouteData.Values.TryGetValue("sessionId", out sessionId))
{
UrlSessionId = sessionId.ToString();
}
}
}
在您的控制器上继承自此基本控制器:
public class HomeController : BaseController
所以你的控制器可以访问基地。UrlSessionId。
用户登录后,开始使用Url中的sessionId;
[HttpPost]
public ActionResult SignIn(User data)
{
// authenticate
return RedirectToAction("AfterSignedIn", new { sessionId = Session.SessionID, id = "my id" } );
}
在您的视图上,创建与SessionId的链接,如下所示:
@Html.ActionLink("My link", "ActionWithUrlSession", "YourController", new { sessionId = Session.SessionID, id = "my id" }, null)
在这里,你实际上可以使用Session.SessionID之外的任何其他东西,你可能更擅长识别当前登录用户。