Array
(
)

dúvidas com Session

Willbnu
   - 19 mai 2009

Bom dia galera...
então, to com um problema com session em um sisteminha de suporte on-line que to desenvolvendo.
Vou explicar o problema: o usuário digita seu nome de usuário, então é criado um objeto onde atribuidos os dados do usuario como o nome, o id, e se o usuario logado é administrador, então eu passo esse objeto para uma Session (´Session[´User´]´). Até aqui tudo bem, o problema, é que se eu logar com outro usuário, ele sobrescreve os dados do usuário que logou antes, ai que está meu problema, a Session não deveria ser unica por cliente???? Vou mostrar o código para voces analizarem.

protected void btnLogin_Click(object sender, EventArgs e)
{
classes.Login login = new classes.Login();
login.executeLogin(((TextBox)frmLogin.FindControl(´txtUserName´)).Text);

//Retorna o id e o nome do último usuário logado
DataTable lastLogin = login.returnLastLogin();

//atribui os dados do ultimo logado para as propriedades
login.IdUser = (int)lastLogin.Rows[0][´idUser´];
login.NmUser = lastLogin.Rows[0][´nmUser´].ToString();
login.IsAdm = (bool)lastLogin.Rows[0][´isAdm´];

Session[´User´] = login;

Response.Redirect(´chat-room.aspx´);
}

esse código acima é da tela de login, agora vou mostrar como eu recupero os dados na hora do chat.

protected void btnSend_Click(object sender, EventArgs e)
{
classes.Login log = (classes.Login)Session[´User´];

Messages message = new Messages();
message.IdAdm = log.IdAdm;
message.IdUser = log.IdUser;
message.NmUser = log.NmUser;
string text = string.Format(´{0} {1} diz: {2}´, DateTime.Now.ToString(´dd/MM hh:mm:ss´), message.NmUser, ((TextBox)frmChatRoom.FindControl(´txtMessage´)).Text);
message.DsMessage = text;

if (Application[´messages´] != null)
{
ArrayList arrayMessages = (ArrayList)Application[´messages´];
arrayMessages.Add(message);
Application[´messages´] = arrayMessages;
}
else
{
ArrayList arrayMessages = new ArrayList();
arrayMessages.Add(message);
Application[´messages´] = arrayMessages;
}

showMessage();
}

Não sei se do modo que estou fazendo está errado, mas eu não encontrei outra forma que pudesse sanar minha dúvida.

Espero resposta, valeu

Tiagodb
   - 25 mai 2009

As variáveis de session são iguais para um mesmo cliente.
O que você pode fazer é armazenar na variável de session uma lista de clientes (array) e somente alternar entre o user logado.