none
Session Compartilhada entre projetos RRS feed

  • Pergunta

  • Boa Tarde,

    Estou precisando compartilhar sessão entre projetos, pesquisando encontrei algumas soluções, a que me atende é utilizando Sessão por SQL, configurei o ambiente seguindo os passos deste site:

    http://www.erysson.com.br/post/2011/03/09/Session-no-SQLServer-Exemplo.aspx

    As Sessions estão gravando no banco, mas não consigo/sei obter os valores desta sessão na outra aplicação e nem mesmo na propria aplicação caso renincie o debug do sistema, outro problema que vejo também é que os dados continuam sempre no banco, mesmo depois que expiram.

    Agradeço!!!

    sexta-feira, 20 de julho de 2012 19:16

Respostas

  • Guy, use cookies.

    Quando você estiver realizando o procedimento de autenticação / login, gere um registro numa tabela no banco de dados com o nome do usuário e um token (um número de identificação único... talvez usando o Guid()). Então pegue esse token, criptografe (MD5, SHA1, etc) e salve em um cookie. Redirecione o usuário para a aplicação externa, ou seja, fora da aplicação de login. Recupere esse token do cookie e compare com a o token gravado no banco. Sendo válido, ou seja, o valor do cookie igual ao do banco, recupere o usuário e senha e crie sua sessão na aplicação corrente. Após isso remova o cookie.

    Sempre que navegar entre as aplicações, faça esse procedimento.

    1 - Gere um token no banco armazenando junto a linha usuário e senha;
    2 - Salve o token criptografado no cookie;
    3 - Redirecione o usuário a alguma aplicação;
    4 - Na aplicação, acesse o token e verifique sua existência no banco;
    5 - Recupere o usuário e senha e gere sua session na aplicação;
    6 - Remova o Cookie;

    É importante dar uma atenção especial apenas nas questões de segurança, como sempre remover o cookie antes, durante e depois dos acessos, talvez até usando a Global.asax.

    Abs,
    Rafael


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto


    • Editado Rafa Santos segunda-feira, 23 de julho de 2012 19:21
    • Marcado como Resposta David Prado Lima quarta-feira, 25 de julho de 2012 19:17
    segunda-feira, 23 de julho de 2012 19:20

Todas as Respostas

  • O seu cenário de compartilhamento se sessão entre projetos não está muito claro, porém, em princípio, você poderia fazer testes com "Application", ou variáveis de aplicação. O uso é o mesmo da Session, porém usa-se desta forma: Application["CHAVE"] = valor;

    Como o próprio nome diz, a variável é da aplicação e não de um usuário específico (no caso, seria projeto) e você poderia compartilhar.

    Se não for exatamente isso que você quer (apenas compartilhar as variáveis), tente explicar melhor o seu cenário.

    Abs


    Rodolfo Paoni

    segunda-feira, 23 de julho de 2012 13:48
  • Rodolfo Obrigado pela dica e atenção, Infelizmente as variaveis de aplicação não resolve o problema.

    Explicando melhor meu problema.

    Tenho uma aplicação onde o Usuario efetua o Login, dentro deste portal tenho Iframes que apontam para outras aplicações que precisam de informações deste Login, Poderia utilizarQunão posso passar essas informações por QueryString pois dentro dessas outras aplicações existe um componente fechado e tercerizado que me impede de trabalhar com QueryString. logo preciso de algo que funcione semelhante a Sessions mas entre aplicações...

    segunda-feira, 23 de julho de 2012 17:55
  • Guy, use cookies.

    Quando você estiver realizando o procedimento de autenticação / login, gere um registro numa tabela no banco de dados com o nome do usuário e um token (um número de identificação único... talvez usando o Guid()). Então pegue esse token, criptografe (MD5, SHA1, etc) e salve em um cookie. Redirecione o usuário para a aplicação externa, ou seja, fora da aplicação de login. Recupere esse token do cookie e compare com a o token gravado no banco. Sendo válido, ou seja, o valor do cookie igual ao do banco, recupere o usuário e senha e crie sua sessão na aplicação corrente. Após isso remova o cookie.

    Sempre que navegar entre as aplicações, faça esse procedimento.

    1 - Gere um token no banco armazenando junto a linha usuário e senha;
    2 - Salve o token criptografado no cookie;
    3 - Redirecione o usuário a alguma aplicação;
    4 - Na aplicação, acesse o token e verifique sua existência no banco;
    5 - Recupere o usuário e senha e gere sua session na aplicação;
    6 - Remova o Cookie;

    É importante dar uma atenção especial apenas nas questões de segurança, como sempre remover o cookie antes, durante e depois dos acessos, talvez até usando a Global.asax.

    Abs,
    Rafael


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto


    • Editado Rafa Santos segunda-feira, 23 de julho de 2012 19:21
    • Marcado como Resposta David Prado Lima quarta-feira, 25 de julho de 2012 19:17
    segunda-feira, 23 de julho de 2012 19:20
  • Rafa Santos,

    Obrigado pela resposta, usar sua solução resolve o problema, mas infelizmente so utilizarei cookies como ultima situação, pois algumas minorias de clientes configuram suas maquinas para não aceitarem cookies, devido a isto estou pensando em criar uma tabela que vai controlar o acesso ao site, nesta terei o ip do cliente e assim apenas vou comparar se ele ja esta registrado.

    acho que assim posso resolver o problema utilizando sua Ideia, Obrigado!.. rsrs

    agora você ou alguem puder me corrigir:

    Configurar o WebConfig desta forma não seria o suficiente para armazenar a sessão no banco?

    <sessionState
          mode="SQLServer"             
          sqlConnectionString="data source=DAVID\SQLEXPRESS;Persist Security Info=True; Integrated Security=SSPI;"
          timeout="20">

    </sessionState>

    Grato!!

    quarta-feira, 25 de julho de 2012 19:17
  • Na verdade eu não estou certo quanto a sua última pergunta. Nunca trabalhei desta forma, então teria que consultar em um livro ou google. Como estou completamente enrolado agora, passo.

    Quanto a sua ideia de colocar o IP no SQL Server e depois recuperar, atente-se apenas ao fato de que se sua aplicação for web, o IP que ela compartilha é do servidor de hospedagem do sistema, e não do cliente que está acessando.


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto


    • Editado Rafa Santos quarta-feira, 25 de julho de 2012 19:20
    quarta-feira, 25 de julho de 2012 19:20