Fórum Session e FormsAuthentication #9428

21/09/2009

0

Olá, Gostaria de saber qual é a melhor maneira de armazenar os dados do usuário como também algumas outras variáveis durante o tempo que o mesmo fica logado na aplicação.   Para o usuário logado, eu utilizo o User.Identity.Name, para as demais variáveis estou atualmente utilizando o Session.   Apesar de funcionar, estou tendo alguns problema que me fizeram duvidar se esta seria mesmo a melhor maneira de armazenamento das informações, pois meu Session está expirando ANTES do tempo de expiração do LOGIN.   Já tentei utilizar no Web.Config a configuração de timeout igual para o Form Authentication e para o Session State, porém não adiantou. O session continua expirando antes do login.   Obrigado, Rubens
Rubens Cury

Rubens Cury

Responder

Posts

21/09/2009

Fabio Mans

Olá Rubens você utiliza Roles na sua autenticação?

Caso utilize eu te mostro com eu faço.

Aguardo sua resposta.

Fabio
Responder

Gostei + 0

21/09/2009

Rubens Cury

Olá Fábio,   Não, não utilizo Roles e funcionalidades do Membership.   Abraço, Rubens
Responder

Gostei + 0

21/09/2009

Fabio Mans

Rubens como você trabalha com regras de acesso na sua aplicação?
Roles não faz parte somente do Membership.

Caso tenha interesse em saber mais sobre o assunto recomendo o curso abaixo.
https://www.devmedia.com.br/articles/viewcomp.asp?comp=11713

Como não atiliza Roles, neste caso já pensou em gravar as informações em Cookie ao invés da Session?


Fabio



Responder

Gostei + 0

21/09/2009

Rubens Cury

Olá Fábio,   As regras de acesso da minha aplicação como são uma pouco mais específicas do que as funcionalidades contempladas pelos "roles" e por isso eu utilizo diretamente nas minhas tabelas; onde armazeno nomes de formulários, campos e regra de acesso para cada um deles.   Eu já conhecia brevemente os "roles", mas pensava que ele só puedsse ser utilizado juntamente com o "Membership" do Asp.Net. Vou dar uma olhada no artigo sugeriu sim...   Porém, acredito que a segunda parte da sua responsta venha mais de encontro com o que estou necessitando neste momento.   Você sugeriria os Cookies ao invés das Sessions por qual motivo ? Sei que o comportamento deles são semlhantes porém sei pouco em relação a questão de segurança e utilização dos Cookies.   Teria idéia do porque a minha sessão de login expira depois das sessions ? Nesta questão será que seria melhor os Cookies também ?   Obrigado!
Responder

Gostei + 0

21/09/2009

Fabio Mans

Você pode postar o seu Web.Config e como está fazendo a autenticação e criação das Sessions?

Fabio


Responder

Gostei + 0

21/09/2009

Rubens Cury

Olá Fábio, Segue abaixo o código contido no meu Web.config para vossa análise.       <authentication mode="Forms">
      <forms name="ErpAutoLogin" loginUrl="Login.aspx" timeout="30">
      </forms>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>     <sessionState
      mode="InProc"
      timeout="30" >
    </sessionState> As sessions são criadas conforme se segue o exemplo.

HttpContext.Current.Session.Add("IdiomaID", idiomaID);   Até+
Responder

Gostei + 0

21/09/2009

Fabio Mans

E como você cria o ticket (autenticação)?
Responder

Gostei + 0

21/09/2009

Rubens Cury

Não, não crio não... Até vi em alguns fórums algumas pessoas sugerindo o uso do FormsAuthenticationTicket mas desconsiderei...   A única coisa que faço caso as informações de usuáio e senha estejam corretas é um RedirectFromLoginPage conforme segue abaixo.
FormsAuthentication.RedirectFromLoginPage(IQUsuarios.First().SiglaUsuario, true);      
Responder

Gostei + 0

21/09/2009

Fabio Mans

Então na linha abaixo você está criando um ticket, eu particularmente passo outros parâmetros para o Ticket mas só é possível com Roles, outras opções são Session (que você está utilizando) ou Coookie, e pelo que você me passou eu não vi problemas, está tudo correto com a session. O que você pode fazer é verificar se a session existe, caso contrário solicitar a autenticação do usuário novamente.

FormsAuthentication.RedirectFromLoginPage(IQUsuarios.First().SiglaUsuario, true);


Fabio
Responder

Gostei + 0

21/09/2009

Rubens Cury

Olá Fábio,   Não sabia que a classe FormsAuthentication representava a criação de um ticket; pensei que o mesmo só existisse quando utilizada a classe FormsAuthenticationTicket...   Mas enfim... a sugestão enviada para verificar a existência do Session e caso contrário redirecionar novamente para o Login eu na verdade já havia feito. Se um session xpto não existisse eu realizada um SignOut e depois então o Redirect novamente.   O problema na verdade é que meus Sessions estão expirando muito rápido, portanto minha aplicação ficaria péssima pois o usuário precisaria se autenticar o tempo todo!   Ah, um detalhe que acabo de me lembrar é que eu já tinha tentado utilizar os Cookies ao invés dos Sessions e pessei pelo MESMO PROBLEMA. Eles expiravam rapidamente e não existe nada em minha aplicação que está "matando" as Sessions e/ou Cookies. O cookie da autenticação funciona perfeitamente, mas os que eu crio não...   Será que poderia ser algo no meu IIS ? É estranho pois isso ocorre em dois micros distintos, um com vista e outro com XP.   Não tenho idéia do que está ocorrendo mas procurando pela web verifiquei que muitas pessoas passam por este problema. Apesar disso não achei ainda nenhuma resposta clara para tais perguntas.   []',s Rubens
Responder

Gostei + 0

23/09/2009

Rubens Cury

Oi Fábio,   Diante do post inicial, gostaria de compartilhar com você que percebi que os Coookies e Session na verdade só expiram quando eu fecho o browser. Caso contrário eles permanecem até o tempo que determinei.   Porém com o cookie do FormsAuthentication não ocorre a mesma coisa, ou seja ele permanece ativo mesmo depois de fechar o browser, pois ao abrí-lo e entrar novamente na aplicação a mesma já está autenticada.   Minha dúvida: Não consigo fazer minhas sessions e cookies se comportarem da mesma maneira que o FormsAuthentication ?    Ou então o contrário; fazer com que o cookie do FormsAuthentication seja finalizado ao fechar o browser como os demais ?   Obrigado, Rubens
Responder

Gostei + 0

23/09/2009

Fabio Mans

Oi Rubens.

FormsAuthentication.RedirectFromLoginPage(IQUsuarios.First().SiglaUsuario, true);

Veja o true, significa que mesmo quando ele fechar o navegador o ticket (cookie) ainda continua na máquina dele, por este motivo quando ele volta ainda está logado, coloque false e faça um teste.


Faça um teste, crie a session da seguinte maneira.


Session["IdiomaID"] = idiomaID

ao invés de


HttpContext.Current.Session.Add("IdiomaID", idiomaID);


Fabio
Responder

Gostei + 0

23/09/2009

Rubens Cury

Olá Fábio,   Era tudo o que eu precisava! Não havia me atentado em relação a que o parâmetro "true" do FormsAuthentication estava representando.   Alterei para "false" e agora não tenho mais o problema de ficar com as Sessions finalizadas e o FormsAuthentication ainda armazenado.   Em relação a usar Session["aaa"] ou invés de chamá-lo através do HttpContext, eu não consigo usá-lo desta forma através de uma classe, que no meu caso é onde estou realizando tal ação.   De qualquer forma, para mim está solucionado...   Muito Obrigado, Rubens Cury
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar