View Full Version : Login para uma Agenda (ASP.NET / VB.NET)
peter alien 06-01-2008, 16:09 Estava a tentar criar uma Agenda online c/ Login, mas por agora deparei-me com dois problemas:
1) Depois de fazer o Login e ir para a página que irá possuir a Agenda, o user pode sempre voltar atrás clicando no botão do Back do IE, assim como, se pode logo colocar o endereço correspondente à página que contem a agenda, evitando assim a página inicial de login.
2) Queria na página Agenda.aspx, fazer inicialmente um check ao valor do "Login1.UserName" (contem o nome do user) de modo a verificar se não está vazio, porque assim veria que o user entrou na agenda fazendo o login, e só nessas condições a agenda seria disponibilizada.
O problema é, como é que eu consigo recuperar um valor entrado na página Login.aspx de modo a poder reutiliza-lo na página Agenda.aspx?
Os códigos da páginas Login.aspx e Agenda.aspx são respectivamente estes:
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs)
If Login1.UserName = "Pedro" And Login1.Password = "tudook" Then
e.Authenticated = True
Else
e.Authenticated = False
End If
End Sub
</script>
<html>
<head></head>
<body style="font-family:Verdana, Arial, Helvetica, sans-serif">
<br><br><br>
<center>
<form id="Form1" runat="server">
<asp:Login id="Login1" runat="server" backcolor="#EFF3FB" bordercolor="#B5C7DE" borderpadding="4" borderstyle="Solid" borderwidth="1px" font-names="Verdana" font-size="0.8em"
forecolor="#333333" OnAuthenticate="Login1_Authenticate" DisplayRememberMe="False" RememberMeText="" TitleText="Acesso" UserNameLabelText="Nome:" DestinationPageUrl="Agenda.aspx" FailureText="Os Dados introduzidos são inválidos !" Height="84px" LoginButtonText="Entrar" Width="235px" EnableViewState="False" UserNameRequiredErrorMessage="Username is required.">
<TitleTextStyle BackColor="#507CD1" ForeColor="White" Font-Size="0.9em" Font-Bold="True"></TitleTextStyle>
<InstructionTextStyle ForeColor="Black" Font-Italic="True"></InstructionTextStyle>
<TextBoxStyle Font-Size="0.8em"></TextBoxStyle>
<LoginButtonStyle BackColor="White" BorderStyle="Solid" ForeColor="#284E98" BorderWidth="1px" BorderColor="#507CD1" Font-Size="0.8em" Font-Names="Verdana"></LoginButtonStyle>
<FailureTextStyle Font-Size="0.8em" Font-Bold="False" Font-Italic="False" />
<ValidatorTextStyle ForeColor="Orange" />
</asp:login>
</form>
</center>
</body>
</html>
e
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub TextBox1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
TextBox1.Text = Request.Form("Login1.UserName")
End Sub
</script>
<html>
<body>
<form runat=server>
<asp:TextBox ID="TextBox1" runat="server" OnLoad="TextBox1_Load"></asp:TextBox>
</form>
AGENDA ...
...
</body>
</html>
Obrigadão
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs)
If Login1.UserName = "Pedro" And Login1.Password = "tudook" Then
Session("User") = Login1.UserName
e.Authenticated = True
Session("auth") = e.Authenticated
Else
Session("User") = ""
e.Authenticated = False
Session("auth") = e.Authenticated
End If
End Sub
</script>
<html>
<head></head>
<body style="font-family:Verdana, Arial, Helvetica, sans-serif">
<br><br><br>
<center>
<form id="Form1" runat="server">
<asp:Login id="Login1" runat="server" backcolor="#EFF3FB" bordercolor="#B5C7DE" borderpadding="4" borderstyle="Solid" borderwidth="1px" font-names="Verdana" font-size="0.8em"
forecolor="#333333" OnAuthenticate="Login1_Authenticate" DisplayRememberMe="False" RememberMeText="" TitleText="Acesso" UserNameLabelText="Nome:" DestinationPageUrl="Agenda.aspx" FailureText="Os Dados introduzidos são inválidos !" Height="84px" LoginButtonText="Entrar" Width="235px" EnableViewState="False" UserNameRequiredErrorMessage="Username is required.">
<TitleTextStyle BackColor="#507CD1" ForeColor="White" Font-Size="0.9em" Font-Bold="True"></TitleTextStyle>
<InstructionTextStyle ForeColor="Black" Font-Italic="True"></InstructionTextStyle>
<TextBoxStyle Font-Size="0.8em"></TextBoxStyle>
<LoginButtonStyle BackColor="White" BorderStyle="Solid" ForeColor="#284E98" BorderWidth="1px" BorderColor="#507CD1" Font-Size="0.8em" Font-Names="Verdana"></LoginButtonStyle>
<FailureTextStyle Font-Size="0.8em" Font-Bold="False" Font-Italic="False" />
<ValidatorTextStyle ForeColor="Orange" />
</asp:login>
</form>
</center>
</body>
</html>
e
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub TextBox1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
if Session("auth") != True then
Mensagem de erro
response.redirect(nome da pagina de login) (ex: "~/Default.aspx")
end if
TextBox1.Text = Session("User")
End Sub
</script>
<html>
<body>
<form runat=server>
<asp:TextBox ID="TextBox1" runat="server" OnLoad="TextBox1_Load"></asp:TextBox>
</form>
AGENDA ...
...
</body>
</html>
Obrigadão
Penso que assim resulte, é a única ideia que tenho neste momento e para começar não deve haver problema, mas existem maneiras mais seguras de fazer esse controlo (e mais avançadas).
cumps,
Khrono
peter alien 09-01-2008, 12:37 Podem-me dar umas dicas sobre uma maneira mais segura (ou avançada :) ) de se fazer isto?
Obrigadão
pascasso 09-01-2008, 19:25 boas,
cookie.
peter alien 10-01-2008, 11:13 Já ouvi falar dos cookies e sei para que servem, mas em termos de programá-los estou completamente em branco :(
Podem-me dar umas dicas de como criar um?
Já agora em relação ao código acima descrito, ele não é seguro quanto baste?
Obrigado
pascasso 10-01-2008, 17:23 boas,
se queres que te diga acho essa maneira mais segura. Ainda queres na mesma como fazer cookies?
Existe ainda outra forma mas envolve mexer em IIS, web.config e memberships e afins mas nem eu sei ao certo como meter tudo a trabalhar, já que ficas com a maior parte da informação oculta e em base de dados.
no teu caso, para melhorares a segurança, seria transpor todo o codigo vb para o code behind da pagina .aspx porque pelo que percebi, tu tens todo o codigo na pagina .aspx e penso que depois ao acederes à pagina, consegues ver o codigo vb criado e consequentemente o login que está lá escrito.
se tiveres com ideias de meter mais users a aceder a agenda, aconselho usares bases de dados ( Sql server express, free e facil de ligar ao programa), para evitares os logins escritos no codigo.
em relação aos cookies também tenho conhecimento dessa possibilidade mas desconheço o método de criar já que muitos sites não o aconselham.
cumps
pascasso 10-01-2008, 17:42 no teu caso, para melhorares a segurança, seria transpor todo o codigo vb para o code behind da pagina .aspx porque pelo que percebi, tu tens todo o codigo na pagina .aspx e penso que depois ao acederes à pagina, consegues ver o codigo vb criado e consequentemente o login que está lá escrito.
boas,
isso não é verdade. O código é compilado e é formado o HTML. VB é uma linguagem server-side só quem está do lado do servidor é que consegue ver o código.
Armadillo 10-01-2008, 17:44 no teu caso, para melhorares a segurança, seria transpor todo o codigo vb para o code behind da pagina .aspx porque pelo que percebi, tu tens todo o codigo na pagina .aspx e penso que depois ao acederes à pagina, consegues ver o codigo vb criado e consequentemente o login que está lá escrito.
cumps
Isso nao acontece porque ao executar um aspx, apenas é devolvido codigo html, logo nao há hipotese de ver as passwords (a não ser que se hacke o ficheiro para read e nao para executar), penso eu de que..
peter alien 10-01-2008, 18:55 bem... por mim acho a ideia do code Behind bastante interessante, mas digam-me uma coisa como o código está há hipotese de alguem conseguir "saltar" por cima do login?
pascasso 10-01-2008, 18:56 não há.
desconhecia que ao transformar em html, o codigo vb ficasse totalmente oculto e no servidor, foi algo que nunca tinha experimentado já que por norma, eu coloco o codigo vb em code-behind, apenas o javascript (se for pouco codigo) fica no aspx.
Armadillo 11-01-2008, 11:44 desconhecia que ao transformar em html, o codigo vb ficasse totalmente oculto e no servidor, foi algo que nunca tinha experimentado já que por norma, eu coloco o codigo vb em code-behind, apenas o javascript (se for pouco codigo) fica no aspx.
mas deves continuar a fazer assim. o iis devolve conteudo html para poderes ver as paginas, assim como o apache faz para o php and so on...
Se tu fores a ver o source de uma pagina da techzone, verificas que nao ha codigo php, apenas html e jscript, ou seja, conteudo que o browsers conseguem interpretar, apesar de, no endereço, veres lá um ".php".
desconhecia que ao transformar em html, o codigo vb ficasse totalmente oculto e no servidor, f
Por isso se chamam linguagens de servidor!
peter alien 11-01-2008, 13:25 Tirem-me lá duas duvidas:
1) qualquer servidor processa sites que utilizem Code-Behind?
2) Neste exemplo, o Visual Studio 2005, dá-me um erro na linha do "Dim", dizendo que a variavel Z declarada é local e não pode ser usada!???
Então não se podem declarar variaveis dentro de um Procedimento existente numa página aspx?
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs)
Dim Z as string
If Login1.UserName = "Pedro" And Login1.Password = "tudook" Then
Session("User") = Login1.UserName
e.Authenticated = True
Session("auth") = e.Authenticated
Else
Session("User") = ""
e.Authenticated = False
Session("auth") = e.Authenticated
End If
...
End Sub
</script>
<html>
<head></head>
<body style="font-family:Verdana, Arial, Helvetica, sans-serif">
<br><br><br>
<center>
<form id="Form1" runat="server">
<asp:Login id="Login1" runat="server" backcolor="#EFF3FB" bordercolor="#B5C7DE" borderpadding="4" borderstyle="Solid" borderwidth="1px" font-names="Verdana" font-size="0.8em"
forecolor="#333333" OnAuthenticate="Login1_Authenticate" DisplayRememberMe="False" RememberMeText="" TitleText="Acesso" UserNameLabelText="Nome:" DestinationPageUrl="Agenda.aspx" FailureText="Os Dados introduzidos são inválidos !" Height="84px" LoginButtonText="Entrar" Width="235px" EnableViewState="False" UserNameRequiredErrorMessage="Username is required.">
<TitleTextStyle BackColor="#507CD1" ForeColor="White" Font-Size="0.9em" Font-Bold="True"></TitleTextStyle>
<InstructionTextStyle ForeColor="Black" Font-Italic="True"></InstructionTextStyle>
<TextBoxStyle Font-Size="0.8em"></TextBoxStyle>
<LoginButtonStyle BackColor="White" BorderStyle="Solid" ForeColor="#284E98" BorderWidth="1px" BorderColor="#507CD1" Font-Size="0.8em" Font-Names="Verdana"></LoginButtonStyle>
<FailureTextStyle Font-Size="0.8em" Font-Bold="False" Font-Italic="False" />
<ValidatorTextStyle ForeColor="Orange" />
</asp:login>
</form>
</center>
</body>
</html>
podes desde que uses, ai o erro que te dá está relacionado com o facto de não usares a variavel no procedimento.
peter alien 11-01-2008, 14:10 pois é :)... ainda não tinha usado a versão 2005, só a 2003 :(
achei que estava a dar erro por outra razão... e já me estava a passar!
upsss... lá passei por tótó :o sorry...
E em relação ao Code-Behind... basta instalar o quê no Servidor para ele correr? Só o .NET Framework?
é normal que aconteça situações em que a descrição do erro não é a correcta e sejamos induzidos em erro, também já passei por essa situação.
para o servidor apenas precisas do IIS e do .NET framework mas isso precisas sempre quer uses code-behind ou não.
peter alien 11-01-2008, 16:19 Obrigadão :D
depois quando um user estiver na Agenda e quiser terminar a sessão, como faço?
Crio um link na Agenda a dizer por exemplo "Logout". Mas e em relação ao código como faço para encerrar a sessão em segurança?
pascasso 11-01-2008, 17:35 boas,
e.Authenticated = False
response.redirect("por aki o endereço")
Porque não usas o Membership e Profile do asp.net 2.0?
Muito facil de usar para autenticações e para guardar info de um de determincado utilizador e tens logo métodos para verificar tudo o que queres.
Se queres manter estado entre páginas, podes também optar por outra solução sem ser o uso de variáveis de Sessão.
peter alien 13-01-2008, 00:01 OBRIGADÃO... foram todos 5 estrelas! :)
peter alien 14-01-2008, 00:25 Infelizmente quando clico no link "Encerrar Sessão"... não acontece nada...
podem-me explicar porquê?
O código da página é este:
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Label1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Session("auth") <> True Then
Response.Redirect("Login.aspx")
End If
Label1.Text = Session("User")
End Sub
Protected Sub Logout(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs)
e.Authenticated = False
Response.Redirect("Login.aspx")
End Sub
</script>
<html>
<body>
<form runat="server">
<table align="left" width="250" bordercolor="#999999" border="1" cellpadding="2">
<tr>
<td width="100" align="center" bgcolor="#FFFFCC">
<span style="color:#339900"><b>Utilizador</b></span>
</td>
<td width="150" align="center">
<span style="color:#000099"><asp:Label ID="Label1" runat="server" OnLoad="Label1_Load"></asp:Label></span>
</td>
</tr>
</table>
<table align="right" width="150" border="1" bordercolor="#999999" cellpadding="2">
<tr>
<td width="150" align="center" bgcolor="#FFFFCC">
<a href="#" onClick="Logout"><span style="color:#FF0000"><b>Encerrar Sessão</b></span></a>
</td>
</tr>
</table>
</form>
<br><br><br>
(Conteúdo)...
</body>
</html>
peter alien 14-01-2008, 14:23 Usei um botão em vez de um Link.
Agora já está a funcionar... mas não consegui utilizar o "e.authenticated = false" para fazer o Logout, em vez disso usei o Session.Clear, o Session.Abandon e o Response.Redirect.
Acham que assim o Logout é feito com segurança?
O código da página Login.aspx e da página Reserved.aspx, são os seguintes:
Login.aspx
----------
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs)
Dim Pass As String
Pass = Login1.UserName & "|" & Login1.Password
Select Case Pass
Case "Pedro|123", "Susana|456", "Ricardo|789"
Session("User") = Login1.UserName
e.Authenticated = True
Session("auth") = e.Authenticated
Case Else
Session("User") = ""
e.Authenticated = False
Session("auth") = e.Authenticated
End Select
End Sub
</script>
<html>
<head></head>
<body background="Imagens/BGGradiente.png">
<br><br><br><br><br><br><br><br><br><br><br><br>
<center>
<form id="Form1" runat="server">
<asp:Login id="Login1" runat="server" backcolor="#EFF3FB" bordercolor="#B5C7DE" borderpadding="4" borderstyle="Solid" borderwidth="1px" font-names="Verdana" font-size="0.8em" forecolor="#333333" OnAuthenticate="Login1_Authenticate" DisplayRememberMe="False" RememberMeText="" TitleText="Acesso" UserNameLabelText="Nome:" DestinationPageUrl="Reserved.aspx" FailureText="Os Dados introduzidos não são válidos!" Height="84px" LoginButtonText="Entrar" Width="235px" EnableViewState="False" UserNameRequiredErrorMessage="Username is required.">
<TitleTextStyle BackColor="#507CD1" ForeColor="White" Font-Size="0.9em" Font-Bold="True"></TitleTextStyle>
<InstructionTextStyle ForeColor="Black" Font-Italic="True"></InstructionTextStyle>
<TextBoxStyle Font-Size="0.8em"></TextBoxStyle>
<LoginButtonStyle BackColor="White" BorderStyle="Solid" ForeColor="#284E98" BorderWidth="1px" BorderColor="#507CD1" Font-Size="0.8em" Font-Names="Verdana"></LoginButtonStyle>
<FailureTextStyle Font-Size="0.8em" Font-Bold="False" Font-Italic="False" />
<ValidatorTextStyle ForeColor="Orange" />
</asp:login>
</form>
</center>
</body>
</html>
Reserved.aspx
--------------
<%@ Page Language="VB" %>
<script runat="server">
Protected Sub Label1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If Session("auth") <> True Then
Response.Redirect("Login.aspx")
End If
Label1.Text = Session("User")
End Sub
Protected Sub Logout(ByVal sender As Object, ByVal e As System.EventArgs)
Session.Clear()
Session.Abandon()
Response.Redirect("Login.aspx")
End Sub
</script>
<html>
<body background="Imagens/BGGradiente.png">
<form runat="server">
<table align="left" width="250" bordercolor="#999999" border="1" cellpadding="2">
<tr>
<td width="100" align="center" bgcolor="#FFFFCC">
<span style="color:#339900"><b>Utilizador</b></span>
</td>
<td width="150" align="center">
<span style="color:#000099"><asp:Label ID="Label1" runat="server" OnLoad="Label1_Load"></asp:Label></span>
</td>
</tr>
</table>
<asp:Button ID="Button1" Text="Encerrar Sessão" runat="server" OnClick="Logout"></asp:Button>
</form>
<br><br><br>
(Conteúdo)...
</body>
</html>
pascasso 14-01-2008, 17:22 boas,
session.clear também serve.
peter alien 15-01-2008, 01:13 A minha duvida mesmo, é se o Logout é bem executado... uma vez que, e penso que repararam, eu usei uma determinada maneira para fazer o Login, e para fazer o Logout usei outra.
|
|