Usuário com melhor resposta
Sessions no MVC 4 com ASP.Net e C#

Pergunta
-
Bom dia senhores .
Desde já agredeço por terem clicado nesse post , e ficarei mais grato ainda se puderem me ajudar em algumas dúvidas.
Estou começando a trabalhar com ASP.NET MVC e gostaria de seguir o padrão que o mesmo propõe, pois por muito tempo
fiquei fazendo POG ( Programação Orientada a Gambiarra) , porém estou cada vez mais buscando fazer as coisas nos seus
devidos padrões .Em relação ao problema é o seguinte quero trabalhar com Sessões ( Sessions ) no MVC 4 , estou conseguindo trabalhar do modo
que eu esperava porém não sei ao certo se deve ser assim a forma de criação do que fiz.Tenho 2 controllers e 2 views.
Valida e Download , o fato é que o usuário só pode ter acesso a página Download depois que passar pela Valida , fiz um exemplo bem
básico só pra questão de entendimento vejam como está os códigos abaixo.Controller da página Valida :
public class ValidaController : Controller
{
//
// GET: /Valida/public ActionResult Index()
{
return View();
}
[HttpPost]
public void Redirecionar()
{Session["Logado"] = true;
Response.Redirect("~/Download",false);}
}
View da página Valida :
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}<h2>Index</h2>
@using (Html.BeginForm("Redirecionar","Valida",FormMethod.Post))
{<input type="submit" value="Entrar" name="btnEntrar" />
}
***************************************************************
Controller da página Download :
public class DownloadController : Controller
{
private bool Logado
{
get {if (Session["Logado"] == null)
{
Session["Logado"] = false;
}return (bool)Session["Logado"];
}
set {Session["Logado"] = value;
}}
//
// GET: /Download/public ActionResult Index()
{
ViewBag.Acesso = Logado;
return View();
}[HttpGet]
public void Logoff()
{
Session.Remove("Logado");
Response.Redirect("~/Valida",false);
}}
View da página Download :
@{
if(!Convert.ToBoolean(ViewBag.Acesso))
{
Response.Redirect("~/Valida");
}
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}<h2>Index</h2>
<h1> Sou a página de Downloads É isso ae.</h1>
@Html.ActionLink("Sair", "Logoff", "Download")
***********************************************
Como disse estou conseguindo trabalhar assim , porém o que posso melhorar para ficar mais adequado ao padrão MVC , percebam
que tive que usar validação na View , só o fato disso acontecer já quebra o padrão , pois essa responsabilidade deveria ser do Controller
mas como faria no caso acima.Detalhe que usar sessões mesmo , sei que existem os forms autentication mas queria ver com sessões.
Novamente Obrigado a todos.
- Editado Davi Murilo sexta-feira, 7 de dezembro de 2012 13:02
Respostas
-
Existem várias formas de trabalhar com autorização em ASP.NET MVC a forma mais comum de e utilizando os próprios recursos do framework usando as Classes FormsAuthentication e Membership.
O você fez não está errado funciona, mais você pode centralizar mais as informações relacionada ao usuário logado facilitando a manutenção, por exemplo criando uma classe UsuarioLogado:
public class UsuarioLogado { public static string Usuario { get { HttpSessionState sessao = HttpContext.Current.Session; return IsAutenticado ? sessao["USUARIO"] : ""; } } public static bool IsAutenticado { get { HttpSessionState sessao = HttpContext.Current.Session; return sessao["USUARIO"] != null } } }
Se a resposta foi útil vote. Desde já agradeço. At. Emerson Jose Mail: emersonjprogramador@gmail.com
- Marcado como Resposta Davi Murilo segunda-feira, 10 de dezembro de 2012 12:33
Todas as Respostas
-
Existem várias formas de trabalhar com autorização em ASP.NET MVC a forma mais comum de e utilizando os próprios recursos do framework usando as Classes FormsAuthentication e Membership.
O você fez não está errado funciona, mais você pode centralizar mais as informações relacionada ao usuário logado facilitando a manutenção, por exemplo criando uma classe UsuarioLogado:
public class UsuarioLogado { public static string Usuario { get { HttpSessionState sessao = HttpContext.Current.Session; return IsAutenticado ? sessao["USUARIO"] : ""; } } public static bool IsAutenticado { get { HttpSessionState sessao = HttpContext.Current.Session; return sessao["USUARIO"] != null } } }
Se a resposta foi útil vote. Desde já agradeço. At. Emerson Jose Mail: emersonjprogramador@gmail.com
- Marcado como Resposta Davi Murilo segunda-feira, 10 de dezembro de 2012 12:33
-
-
Concerteza, o ideal e utilizar filtro mas mesmo assim você vai precisar saber se existe um usuário logado e se tem permissão para executar determinada tarefa no sistema.
Abrs.
Se a resposta foi útil vote. Desde já agradeço. At. Emerson Jose Mail: emersonjprogramador@gmail.com