none
Gravar dados de um objeto dentro de um hidden RRS feed

  • Pergunta

  • Pessoal, Boa tarde!

    Hoje a minha aplicação utiliza a sessão para gravar os dados de um objeto, porém isso não é mais suficiente, pois

    o servidor que ela hospedada fica derrubando todas as sessions da aplicação, é possivel gravar os dados de um objeto de um campo hidden?

    Att 


    Jacqueline Sabino

    sábado, 6 de setembro de 2014 15:56

Todas as Respostas

  • Jacqueline, o seu problema pode esta na configuração do servidor ou colocar mais memória ou até mesmo rever seu sistema em termos de session, se seu sistema é muito acessado vc precisa encontrar alternativas para não só usar session.

    Tenho um sistema assim, que é muito acessado e sempre havia perda de session, a solução que encontrei foi a cada usuário que se loga no site eu gravo um registro no banco e a cada página eu leio esse registro e atualizo a data e hora, qdo o usuário sai do site eu apago o registro no banco, assim resolvi esse problema.

    Eu uso campo hidden para algumas páginas onde preciso da informação, acho que como vc quer usar não é possível.


    Junior

    segunda-feira, 8 de setembro de 2014 11:26
  • Prezado Junior, vou aproveitar a dúvida e a explicação.

    Tenho um sistema intranet que dei acesso a vários usuários e por conta disso ficou mais lento, suponho que devido ao uso de sessions. Você sugeriu uma outra solução, gostaria de saber mais a respeito, e se puder indicar algum exemplo de código sobre isso.

    Desde já obrigado


    • Editado Angelo.Net segunda-feira, 8 de setembro de 2014 20:25 correção
    segunda-feira, 8 de setembro de 2014 20:24
  • Pessoal,

    Consegui gravar  o objeto na hidden, segue abaixo a codificação caso alguém um dia precise.

    //campo hidden recebe o objeto serializado

     campoHidden.Value = Serializar(objeto);

    //retorna o objeto para sua forma original
      object  object1 = (object)Deserializar(campoHidden.Value, new object.GetType());


    //Converte o objeto para um array de bytes

        public string Serializar(object objectInstance)
            {
           using (MemoryStream stream = new MemoryStream())
                {
                    new BinaryFormatter().Serialize(stream, objectInstance);
                    return Convert.ToBase64String(stream.ToArray());
                }

            }

    //retorna o objeto a sua forma original

            public object Deserializar(string objectData, Type type)
            {
                byte[] bytes = Convert.FromBase64String(objectData);

                using (MemoryStream stream = new MemoryStream(bytes))
                {
                    return new BinaryFormatter().Deserialize(stream);
                }
            }

    Bye bye


    Jacqueline Sabino

    quarta-feira, 10 de setembro de 2014 11:54
  • A lentidão pode ser falta de memória no servidor web, lembrando que cada usuário logado criará quantas sessions seus sistema crie, o ideal em sites muito acessados é a diminuição do número de sessions.

    Junior

    • Sugerido como Resposta Angelo.Net terça-feira, 7 de outubro de 2014 18:10
    quarta-feira, 10 de setembro de 2014 12:01
  • Oi Jacqueline,

    Não dá pra fazer com o ViewState?

    Os dados ficariam criptografados (criptografia bem fraca) em um hidden dentro da página, você só precisaria trocar Session["Foo"] por ViewState["Foo"]

    Não vai ficar muito seguro se você tiver dados que não podem aparecer, e ficará bem lento se houver um grande volume de dados pois o servidor irá gerar um aspx maior, mas se for pouca coisa e não forem dados que precisem de segurança não haverá problema.

    Abraço

    http://www.codeproject.com/Articles/26621/Cache-Session-and-ViewState



    • Editado Sant_Anna quinta-feira, 11 de setembro de 2014 19:08
    quinta-feira, 11 de setembro de 2014 19:00