Inquiridor
Gravar dados de um objeto dentro de um hidden

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
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
-
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
-
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
-
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
-
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