ASP.NET - Redirecionando páginas
Neste artigo vou falar sobre como podemos fazer o redirecionamento de páginas em ASP.NET usando Response.Redirect e Server.Transfer.
Como exemplo vou usar uma página simples de Login onde o usuário deverá informar o nome e a senha. Se o nome e a senha estiverem cadastrados irei redirecionar a o usuário para a página Bemvindo.aspx caso contrário retornarei para a página de Login : Login.aspx.
Os dados estão na tabela Usuarios no banco de dados Acesso.mdb que esta na pasta dados dentro da pasta Admin que é o local onde estão as páginas Login.aspx e Bemvindo.aspx
O código completo da pagina Login.aspx é dado a seguir:
<%@ Page Language="VB" %> <%@ import Namespace="System.Web.Security" %> <%@ import Namespace="System.Data.OleDb" %> <script runat="server"> Sub btnLogin_OnClick(Source As Object, E As EventArgs) Dim strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.MapPath("dados/Acesso.mdb") Dim Conn As OleDbConnection = New OleDbConnection(strConn) Dim strConsulta As String = "SELECT Nome FROM Usuarios WHERE Login = @Login AND Senha = @Senha" Dim cmd As OleDbCommand = New OleDbCommand(strConsulta, Conn) Dim objDR as OleDbDataReader With Cmd.Parameters .Add(New OleDBParameter("@Login", txtLogin.text)) .Add(New OleDbParameter("@Senha", txtSenha.text)) End With try Conn.Open() objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection) if objDR.HasRows then Server.Transfer("Bemvindo.aspx") else Response.Redirect("Login.aspx") End If Catch ex As Exception me.lblMensagem.text = "Erro de acesso aos dados" Me.lblMensagem.Visible = True End Try End Sub </script> |
<html> <head> </head> <body> <div align="center"> <form runat="server"> <p align="center"> <img style="WIDTH: 258px; HEIGHT: 45px" height="32" src="maco1b.gif" width="233" border="0" /> </p> <hr /> <table align="center" border="0"> <tbody> <tr><td>Login </td><td> <asp:TextBox id="txtLogin" runat="server" Width="163px"></asp:TextBox> </td></tr><tr><td>Senha </td><td> <asp:TextBox id="txtSenha" runat="server" Width="163px" Height="22px"></asp:TextBox> </td></tr></tbody> </table> </div> <div align="center"> </div> <div align="center"> <asp:Button id="Button1" onclick="btnLogin_OnClick" runat="server" Text="Login"></asp:Button> </div> <div align="center"> </div> <div align="center"><asp:Label id="lblmensagem" runat="server" visible="False"></asp:Label> </div> </form> </body> </html> |
Funciona assim :
Quando o usuário informar o nome e a senha e clicar no botão Login o script será executado. Nele ocorre o seguinte n:
Dim strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Server.MapPath("dados/Acesso.mdb") Dim Conn As OleDbConnection = New OleDbConnection(strConn) |
-Defino a string de conexão e a seguir instancio um objeto Conn do tipo Connection |
Dim strConsulta As String = "SELECT Nome FROM Usuarios WHERE Login = @Login
AND Senha = @Senha" Dim cmd As OleDbCommand = New OleDbCommand(strConsulta, Conn) Dim objDR as OleDbDataReader |
-Defino o comando
SQL para selecionar o nome da tabela Usuário comparando o Login e a
Senha com os valores informados -
Declaro um objeto Command |
With Cmd.Parameters .Add(New OleDBParameter("@Login", txtLogin.text)) .Add(New OleDbParameter("@Senha", txtSenha.text)) End With |
Atribuo os parâmetros conforme os valores informados pelo usuário nos campos do formulário |
Conn.Open() objDR=Cmd.ExecuteReader(system.data.CommandBehavior.CloseConnection) |
Abro a conexão e executo o Command |
if objDR.HasRows then Server.Transfer("Bemvindo.aspx") else Response.Redirect("Login.aspx") End If |
Se encontrou o Nome então há linhas no DataReader e então o login foi efetuado com sucesso. Caso contrário o login deve ser feito tentado novamente pois não houve retorno de linhas no DataReader. |
Talvez esta não seja a melhor forma de você criar uma estrutura de segurança mas eu usei este exemplo apenas para falar de dois comandos usados aqui:
O que eles fazem e qual a diferença ?
Response.Redirect simplesmente envia uma mensagem ao Navegador dizendo a ele para mover-se para outra página.
Server.Transfer também envia o usuário para outra página mas ele tem algumas particularidades.
Ao transferir o usuário para outra página usando Server.Transfer o servidor conserva os recursos já usados. O invés de dizer simplesmente para o Browser redirecionar para outra página ele apenas altera o 'foco' no servidor e transfere a requisição. Isto significa que você não esta criando novas requisições e sua aplicação fica mais rápida.
Mas nem tudo são flores ao usar Server.Transfer , pois o processo de transferência pode operar somente em sites que estão rodando no servidor. Você não pode usar Server.Transfer para enviar o usuário para uma página externa ao servidor. Somente Response.Redirect pode fazer isto.
Além disto Server.Transfer mantém a URL original no Browser o que pode ajudar para entrada de dados mas causar confusão na depuração.
Server.Transfer possui um segundo parâmetro : preserveForm. Se você definí-lo como True assim : Server.Transfer("Login.aspx", True) a consulta existente e qualquer variável de formulário ficará disponível para a página para a qual você esta fazendo a transferência.
Então finalizando podemos concluir que Response.Redirect faz o Browser visitar outra página e Server.Transfer ajuda a reduzir as requisições ao servidor ,mantém a URL , permite a transferência de consultas e variáveis de formulário.
Nota: Server.Execute executa uma página e retorna o resultado.
Até o próximo artigo ASP.NET ...
José Carlos Macoratti