konto usunięte

Temat: ASP.NET + MVC3 Sesje

Potrzebuje jakiś informacji na temat sesji w MVC 3. Jak z nich korzystać? Mam formularz do logowania dla użytkownika, po wprowadzeniu poprawnych danych przekazuje do sesji obiekt klasy admin (zawiera adminid, adminlogin, name, email)
HttpContext.Session.Add("adminLogin", administrator);
Jak korzystając z sesji mogę kontrolować dostęp do pewnych fragmentów strony? Czy istnieje możliwość pobrania pewnych danych z sesji w widoku? Czy oprócz sesji można w jakiś sposób zabezpieczyć dostęp nieuprawionych osób do strony? W niektórych aplikacjach dane sesji przechowywane są w bazie danych, w jakim celu? Z góry dziękuję za pomoc
Grzegorz Kmiecik

Grzegorz Kmiecik Inżynier ds.
Testowania i
Oprogramowania,
Intel Technolog...

Temat: ASP.NET + MVC3 Sesje

Generalnie zabezpieczenia strony implementuje się za pomocą klasy która dziedziczy po MembershipProvider (np SqlMemebrshipProvider)
m.in. tu step by step http://helios.ca/2009/04/22/aspnet-mvc-sqlmembershippr... , dzięki temu potem masz w kodzie możliwość określenia czy user IsAuthenticated albo IsInRole itp.

Nie korzystałem nigdy z sesji jako takich do implementacji zabezpieczenia stron i nie wiem czy tak się tak w ogóle robi.. ale w MVC korzysta się ze stworzonych userów i ról w bazie(patrz link wyżej) + AuthorizeAttribute nakładany na klasę, który daje "dostępy" w zależności od logiki (patrz tutaj:
http://stackoverflow.com/questions/1151450/how-to-impl...

Dane sesji mogą być przetrzymywane m.in w sql zależy to tylko i wyłącznie od konfiguracji i infrastruktury. Nie ma to znaczenia dla asp.net czy te dane bedą w sql czy w pamięci(InProc) czy w jakimś innym rozwiązaniu(Custom).

konto usunięte

Temat: ASP.NET + MVC3 Sesje

Możesz np. kontrolować dostęp do strony za pomocą ról jak pisał Grzegorz.

namespace Sales.Controllers
{
[Authorize(Roles = "Sales,Admin,SuperAdmin,Test") ]
public class ProductsController : Controller
{


IProductRepository productRepository;

public ProductsController()
{
productRepository = new ProductRepository();

}
...
lub nazwą usera
[Authorize(Users="Adam,Iss,Marek,Test")]

lub połączenie z nazwą usera i rolami

[Authorize(Roles="UsersRole", Users="Adam,Iss,Marek,Test")]Bogdan Pieńkowski edytował(a) ten post dnia 24.08.11 o godzinie 18:21

konto usunięte

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.



Wyślij zaproszenie do