【问题标题】:ASP.NET MVC Session with ID in custom header自定义标头中带有 ID 的 ASP.NET MVC 会话
【发布时间】:2011-09-20 08:23:20
【问题描述】:

是否可以在 ASP.NET MVC 中(无需编写太多代码)手动选择当前 sessionId 是什么?我并不是说要创建自己的 sessionId,而是我想将 sessionId 存储在自定义标头中,而不是存储在 cookie 或 url 中。我不介意我是否需要自己阅读标题并在 request_start 中执行类似的操作:

Request.Session = new SessionState(Request.Headers["sessionId"]);

主要是我不想将会话状态存储在 cookie 中(因为不会在应该与 mvc 应用程序对话的设备上启用 cookie),而且我不想必须在客户端解析 url,然后重新发送将 sessionId 插入 url 的所有内容。

另外,如果我不能使用本机 Session 对象执行此操作,我也不介意,我只需要一个快速简便的解决方案,在自定义标头而不是 cookie 中使用令牌。

【问题讨论】:

    标签: c# asp.net asp.net-mvc session-state


    【解决方案1】:

    我知道您提到不想解析 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
    

    因此您的控制器可以访问 base.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 之外的任何东西,您最好使用一些识别当前登录用户的东西。

    【讨论】:

    • 这对会话处理有什么帮助?
    猜你喜欢
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2011-03-03
    相关资源
    最近更新 更多