none
Sessions no MVC 4 com ASP.Net e C# RRS feed

  • 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
    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
    sábado, 8 de dezembro de 2012 03:09

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
    sábado, 8 de dezembro de 2012 03:09
  • Olá, uma prática melhor para fazer isso seria a utilização de filters.

    Segue o link de um exemplo bacana Filters.

    Obs Da uma lida sobre o conteúdo é sempre bom utilizar padrões de programação.

    Abraço.

    segunda-feira, 10 de dezembro de 2012 17:59
  • 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

    sexta-feira, 14 de dezembro de 2012 21:53