1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Sistema de Login ASP.NET

Discussão em 'Web Development' iniciada por XpiritO, 19 de Novembro de 2008. (Respostas: 2; Visualizações: 2520)

  1. XpiritO

    XpiritO Power Member

    Boas a todos.

    Começo desde já por agradecer a ajuda de todos quantos estejam em condições de me ajudar.

    Ora bem, explicando de forma resumida, a situação é a seguinte:

    - Tenho uma página (webform) com campos para introdução de um e-mail e uma password. Após submissão do formulário, é feita uma consulta a uma base de dados para verificar a existência do utilizador com as credenciais submetidas e, caso ele exista, é concedido acesso a uma "página de testes" com o nome paginateste.html.

    - A autenticação é feita em C#, no ficheiro de code-behind do webform, num método associado ao evento de "click" (server-side) no botão de submissão do formulário. Caso as credenciais submetidas correspondam a um utilizador com privilégios de acesso (existe um esquema de "papéis", sendo atribuído um "papel" a cada utilizador, que lhe concede ou impede o acesso à aplicação), é gerado um cookie que é enviado via Response.SetCookie(cookie). Deixo esse trecho de código abaixo, para que possam visualizar:

    Código:
    HttpCookie myCookie = new HttpCookie("userLogin");
    
    myCookie.Values.Add("username", email);
    myCookie.Values.Add("role", role);
    myCookie.Expires = DateTime.Now.AddMinutes(10.0);
    
    //Response.Cookies.Add(myCookie); --> tentei desta forma, mas também não funcionou :(
    Response.SetCookie(myCookie);
    
    Response.Redirect("paginateste.html");
    Depois, existe um módulo de "login" registado no HTTP Pipeline, que intercepta todos os pedidos à aplicação ASP.NET. Esse módulo verifica se existe no pedido o cookie referente à autenticação, que, a existir, teria sido gerado pelo trecho de código apresentado acima. Caso o detecte, permite que o pedido prossiga e seja debitado para a resposta o conteúdo do endpoint ao qual se pretende aceder. Por motivos de teste, introduzi no módulo de login a operação de limpeza do cookie de login em cada pedido servido, para obrigar a que no acto de recarregamento do endpoint, não seja permitido aceder (teste meramente didáctico, para simular a total funcionalidade do módulo).

    É este o código:

    Código:
    /* ****** APENAS PARA TESTE ***************
    * força "Logout" após entrada no endpoint
    **************************************** */
    #if debug
      //"limpa" o cookie do pedido
      context.Request.Cookies.Remove("userLogin");
      //gera um novo cookie com o mesmo nome, para substituir ("caducar/esmagar") o anterior
      HttpCookie cookie = new HttpCookie("userLogin");
      cookie.Expires = DateTime.Now.AddDays(-1d);
      cookie.Value = null;
      context.Response.SetCookie(cookie);
    
      message = String.Format("<p><font color=red>» <em>Cookie Removido!</em> «</font>, valor actual: <strong>{0}</strong></p>", context.Request.Cookies["userLogin"].Value);
      context.Response.Write(message);
    #endif
    /* ************************************* */
    Contudo, o comportamento que obtenho é um tanto ou quanto estranho e não estou a conseguir identificar a origem. Passo a descrever:

    1. Preencho o webform com a combinação de e-mail e password (os campos que são verificados no acto de autenticação) correctos, que me atribuem um "papel" que me permite aceder ao endpoint pretendido (paginateste.html);

    2. É gerado o cookie e sou redireccionado - como seria suposto para o endpoint, sendo-me apresentado o conteúdo da página paginateste.html.

    3. Uma vez concluído o pedido, faço F5 (ou Ctrl+F5, o resultado é o mesmo) para solicitar o recarregamento (acção de GET) do endpoint (paginateste.html). Uma vez que o pedido é interceptado pelo módulo de "login", é-me limpo o cookie e, nessa primeira solicitação de recarregamento do endpoint, sou reencaminhado para o webform de login, para que me autentique novamente caso deseje aceder à página.

    4. Após nova autenticação (submissão de combinação válida de e-mail e password no webform), sou novamente reencaminhado para a paginateste.html. Contudo, neste 2º acesso à página, quando forço o recarregamento do endpoint (F5 ou Ctrl+F5, é indiferente), o cookie não é limpo e, como tal, não é "forçado" o logout da aplicação. Continuo com acesso à página até à expiração do cookie.

    Se alguém me puder ajudar com isto, agradeço. Pesquisei tudo e mais alguma coisa sobre escrita, leitura e expiração de cookies. Já testei a aplicação no Internet Explorer 7.0 e Firefox 3.0.4. Em ambos os browsers o comportamento é idêntico.

    Não sei se interessa, mas deixo aqui a bibliografia que consultei na elaboração do projecto:
    http://msdn.microsoft.com/en-us/library/x3x8t37x.aspx
    http://msdn.microsoft.com/en-us/library/78c837bd.aspx
    http://msdn.microsoft.com/en-us/library/bd70eh18.aspx
    http://msdn.microsoft.com/en-us/library/ms178195.aspx
     
    Última edição: 19 de Novembro de 2008
  2. XpiritO

    XpiritO Power Member

    Ninguém me pode dar uma ajudinha nisto? :(
     
  3. alfinete

    alfinete Power Member

    nunca trabalheicom cockies, mas podes sempre utilizar uma variavel de sessão , eno web config configuras o timeout para que ao fim do tempo que desejas a aplicação aspirar.

    podes penso eu tambem utilizar viewstate

    diiferença entre view state e vairaiavel de sessão

    a variavel de sação para ficar null somos nos que a temos depor a null, e suporta n informação no conteudo da mesma..

    o viewstate tb acomula muita informação mas se for muito grande pode rebentar com a execução da pagina .... e quando fechas a mesma este é posto a null automaticamente ....


    tenta trabalhar com variavel de sessão ....

    é uma hipotese
     

Partilhar esta Página