Temat: ASP.NET + MVC3 Sesje
Z sesji w MVC korzystasz normalnie tak jak w ASP.NET. Ja też przechowuję w niej aktualne role użytkownika - wydaje mi się, że to popularny pattern.
W widoku dobierasz się do sesji normalnie tj. przez ViewContext.HttpContext.Session. Ja jednak potworzyłem swoje helperki:
using System.Web.Mvc;
namespace MvcApplication1.Models {
public static class MyHtmlHelper {
public static MvcHtmlString RenderLoginBox(this HtmlHelper htmlHelper) {
if (null != htmlHelper.ViewContext.HttpContext.Session["adminLogin"]) return MvcHtmlString.Create("Jestes adminem");
else return MvcHtmlString.Create("zwykly user");
}
}
}
i wtedy użycie z widoku (Razor)
@using MvcApplication1.Models;
@Html.RenderLoginBox();
Możesz robić wszystko: warunkowo renderować różne partial widoki lub nawet podmieniać mastera
Czy oprócz sesji można w jakiś sposób zabezpieczyć dostęp nieuprawionych osób do strony?
Autoryzacja to nie odpowiedzialność sesji. W MVC służą do tego AuthorizeAttribute - trzeba by jednak napisać własną wersję, co dzięki rozszerzalności MVC jest raczej łatwe (rejestrując atrybut globalnie - nowość MVC3). O ile pamiętam, nadpisujesz AuthorizeAttribute.AuthorizeCore(HttpContextBase) i tam sam sobie z sesji odczytujesz role i decydujesz co wolno a co nie.
W niektórych aplikacjach dane sesji przechowywane są w bazie danych, w jakim celu?
trwałość danych - po upadku zasilania dane w sesji ciągle istnieją (o ile klient nie zapomniał swojego cookie). Ja osobiście uważam, że to przesada i mi wystarcza StateServer nawet w trakcie developerki - wtedy rekompilacja projektu
nie gubi danych w sesji i nie muszę od nowa przechodzić procesu logowania.