ASP.NET MVC Session с идентификатором в настраиваемом заголовке - PullRequest
2 голосов
/ 22 июня 2011

Возможно ли в ASP.NET MVC (без написания слишком большого количества кода) вручную выбрать текущий идентификатор сессии?Я не имею в виду создание собственного sessionId, а хочу сохранить sessionId в пользовательском заголовке, а не в файле cookie или URL-адресе.Я не против, если мне нужно самому прочитать заголовок и сделать что-то подобное в request_start:

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

Главное, чтобы я не хотел сохранять состояние сеанса в cookie (поскольку файлы cookie не будут включены на устройстве, которое должно взаимодействовать с mvc-приложением), и я не хочу анализировать URL-адрес на клиенте, чтобы затем повторно отправить все с помощью sessionId, вставленного в URL-адрес.

Кроме того, если я не могу сделать это с нативным объектом Session, я тоже не против, мне просто нужно быстрое и простое решение для того, чтобы иметь токен в пользовательском заголовке, а не в cookie.

1 Ответ

0 голосов
/ 12 сентября 2011

Я знаю, что вы упомянули, что не хотите анализировать 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.

Когда пользователь войдет в систему, начните использовать sessionId в своем URL;

[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, возможно, вам лучше использовать что-то, идентифицирующее текущего пользователя, вошедшего в систему.

...