Avatar billede finger Nybegynder
03. september 2002 - 15:29 Der er 12 kommentarer og
1 løsning

HttpSessionState og IsNewSession: husk et login

Brugeren kommer ind på min login.aspx side. her indtaster han brugernavn og password. nu sendes han videre til min valider.aspx side. hvis passwordet er forkert sendes han tilbage til login.aspx siden. her er det så meningen at det brugernavn han indtastede først stadig står i feltet.
hvordan gør man det?
jeg har en ide om at man skal bruge session's til det.
Eller er det smartere at lave det i samme side?
Jeg er blank efter mange forsøg, så alle kodeforslag modtages med kyshånd.

//finger
Avatar billede odegaard Nybegynder
03. september 2002 - 15:49 #1
Du skal jo lave postback til login.aspx og ikke validate.aspx, som sådan set er meningen med ASP.NET.
Dvs.
Brugeren kommer ind på din login.aspx side. Her indtaster han brugernavn og password. Data postes tilbage til login.aspx (som er ASP.NET standard). Hvis passwordet er rigtigt, sendes han videre til de "lukkede" sider. Hvis ikke, bliver han på siden, og ASP.NET søger helt automatisk for at det samme brugernavn forbliver i tekstboksen (igen ASP.NET standard at tekstboksen bibeholder "state").
Avatar billede finger Nybegynder
03. september 2002 - 16:04 #2
ok. lyder smart.
kunne man evt se lidt kode?
Avatar billede z42cool Nybegynder
03. september 2002 - 16:17 #3
<script runat="server" language="c#">

void validateUser(object sender, EventArgs e)
{
    //Validate user here
    bool userIsValidated = false;
    if (userIsValidated)
    {
        Response.Redirect("securepage.aspx");
    } else password.Text = "";
}

</script>

<html>

<head>
</head>

<body>
    <form runat="server">
        Username <asp:TextBox id="username" runat="server" /><br />
        Password <asp:TextBox id="password" runat="server" /><br />
        <asp:Button id="submit" runat="server" onclick="validateUser" Text="Login" />
    </form>
</body>
Avatar billede odegaard Nybegynder
03. september 2002 - 16:22 #4
<%@ Page Language="VB" %>
<script runat="server">
   
    Sub Save_Click(sender As Object, e As EventArgs)
        If tbUsername.Text="brugernavnet" and tbPassword.Text="passwordet" then
            Session("LoggedIn")=True
            Response.redirect("welcome.aspx")
        Else
            lbMessage.Text="Invalid username or password"
        End if
    End Sub

</script>

<html><body>
<FORM id=editorform runat="server">
      <asp:Label id=lbMessage runat="server" ForeColor="Red"></asp:Label><br />
    Please enter username and password<br />
    Username: <asp:Textbox id=tbUsername runat="server" Width="230px" maxlength="50" columns="40"/><br />
    Password: <asp:Textbox id=tbPassword runat="server" Width="230px" maxlength="50" columns="40" TextMode="Password"/><br />
    <asp:Button id=btnLogin onclick=Save_Click runat="server" Text="Login"/>
</form>
</body></html>
Avatar billede odegaard Nybegynder
03. september 2002 - 16:24 #5
Forresten... på alle dine sider som kræver password, skal du i toppen lige tilføje:
    Sub Page_Load(obj as Object, E as EventArgs)
    If Not Session("LoggedIn")=True Then
        Response.redirect("login.aspx")
    End if
    End Sub

Dette sender folk tilbage til login-siden, hvis de forsøger at kalder siderne direkte.
Der er flere metoder til at styre adgang til hjemmeside, men dette er den simple :-)
Avatar billede guidmaster Nybegynder
03. september 2002 - 16:28 #6
Hvorfor ikke benytte asp.net´s indbyggede forms authentication ? Benytter den altid selv - og har ikke haft nogle problemer med det.
Avatar billede finger Nybegynder
03. september 2002 - 16:38 #7
Nu er jeg jo (som det nok fremgår) rimelig ny i asp.net. Anvender forresten C#.
anyways. vi validerer op imod en sql database (har det noget at sige med forms authentication?). her er hvad vi havde lavet før denne tråd blev oprettet, hvis der er nogen der er interesseret. det er i 2 filer (fatter godt nu at det er smartere med 1) og det virkede som sagt ikke.
Kigger på om jeg ikke kan integrere det i en fil med jeres forslag. point tilgår senere.
-----------------------------------------
login.aspx
---------------
<%@ Page language="c#" Codebehind="login.aspx.cs" AutoEventWireup="false" Inherits="logintest.login" %>
<%@ Import namespace ="System.Web.SessionState"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Logintest</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<script language="C#" runat="server">
void Page_Load(object eees, EventArgs ee)
{
string name;
Boolean arg = Session.IsNewSession;
if(arg){
name="login";
} else{
name = (string)Session["brugernavn"];
navn.Value = name;
}
}
</script>

<form action="webform1.aspx" method="post">
<center><h1>X-BuG Login</h1>
<br>
<br>
<p><label>Brugernavn: <input name="brugernavn" type="text" size="20" id="navn" runat="server"/> </label></p>
<p><label>Password: <input name="password" type="password" size="20"/></label></p>
<br>
<input name="OK" type="submit" value="OK" style="WIDTH: 64px; HEIGHT: 24px"></LABEL>
</center>
</form>
</body>
</HTML>
----------------------
webform1.aspx (validering)
---------------------
<%@ Import namespace = "System.Data.SqlClient" %>
<HTML>
<HEAD>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
</HEAD>
<body>
<h1>Data der er gemt i session om den bruger der er logget på</h1>
<script language="C#" runat="server">

private void tjekBruger()
{
//Henter de indtastede værdier fra html dokumentet:
String brugernavn = Request.Form["brugernavn"];
String password = Request.Form["password"];
Session ["brugernavn"] = brugernavn;
//Database forbindelsen:
SqlConnection con = new SqlConnection(
@"Data Source = blabla\sqlserver;" +
"uid=blabla;password=blabla;" +
"Initial Catalog = master;" +
"Connect Timeout=5");
   
//Opretter Querryen til databasen:
String strSQL = "SELECT login,kodeord FROM person WHERE login = '" + brugernavn + "'";
SqlCommand objCommand = new SqlCommand(strSQL, con);
   
try
{
con.Open();
SqlDataReader r=objCommand.ExecuteReader();
r.Read();
if(password==r.GetString(1)){
Response.Write("yep");
}
else{
Response.Write("no");
Response.Redirect("login.aspx");
}
con.Close();
}
catch(System.Data.SqlClient.SqlException ngngndfdd)
{
Response.Write("Følgende fejl skete: ");
Response.Write(ngngndfdd.Message);
}
}
       
private void Page_Load(object sender, System.EventArgs e)

tjekBruger();
}
     
</script>
</body>
</HTML>
Avatar billede guidmaster Nybegynder
03. september 2002 - 16:47 #8
For mere info omkring forms authentication er der en udemærket gennemgang her. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconsimplecookieauthentication.asp
Avatar billede odegaard Nybegynder
03. september 2002 - 17:00 #9
skal page_load ikke over i din codebehind ?
Avatar billede finger Nybegynder
04. september 2002 - 11:10 #10
så kører det. der er dog stadig en exception på forkert brugernavn. tak for hjælpen. her er hvad det blev til.
---------------------------
<%@ Import namespace = "System.Data.SqlClient" %>
<HTML>
    <HEAD>
        <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
        <script language="C#" runat="server">

        private void tjekBruger(object sender, EventArgs e)
        {
            String brugernavn = username.Text;
            String kodeord = password.Text;
            //Database forbindelsen:
            SqlConnection con = new SqlConnection(
                    @"Data Source = thmserver\sqlserver;" +
                    "uid=sa;password=notjava;" +
                    "Initial Catalog = master;" +
                    "Connect Timeout=5");
   
            //Opretter Querryen til databasen:
            String strSQL = "SELECT kodeord FROM person WHERE login = '" + brugernavn + "'";
            SqlCommand objCommand = new SqlCommand(strSQL, con);
   
            try
            {
                con.Open();
                SqlDataReader r=objCommand.ExecuteReader();
               
                r.Read();
                if(kodeord==r.GetString(0)){
                con.Close();
                con.Open();
                strSQL = "SELECT * FROM person WHERE login = '" + brugernavn + "'";
                objCommand = new SqlCommand(strSQL, con);
                r=objCommand.ExecuteReader();
                r.Read();
                Session["loggedIn"]=true;
                Session["login"]=r.GetString(0);
                Session["fornavn"]=r.GetString(1);
                Session["efternavn"]=r.GetString(2);
                Session["telefon"]=r.GetString(3);
                Session["mobil"]=r.GetString(4);             
                Session["email"]=r.GetString(5);
                Session["prioritere"]=r.GetString(7);
                lbMessage.Text="hurra";
                //Response.Redirect("WebForm1.aspx"); her viderestilles til sikre sider
                }
                else{
                lbMessage.Text="Invalid password";
                }
                con.Close();
            }
            catch(System.Data.SqlClient.SqlException ngngndfdd)
            {
                Response.Write("Følgende fejl skete: ");
                Response.Write(ngngndfdd.Message);
            }
        }
        </script>
    </HEAD>
    <body>
        <form action="webform1.aspx" method="post">
            <center><h1>X-BuG Login</h1>
                <br>
                <form runat="server" ID="Form1">
                    <asp:Label id="lbMessage" runat="server" ForeColor="Red"></asp:Label><br>
                    Please enter username and password<br>
                    Username
                    <asp:TextBox id="username" runat="server" /><br>
                    Password
                    <asp:TextBox id="password" runat="server" /><br>
                    <asp:Button id="submit" runat="server" onclick="tjekBruger" Text="Login" />
                </form>
            </center>
    </body>
</HTML>
Avatar billede odegaard Nybegynder
04. september 2002 - 11:39 #11
Du får en exception fordi (r.GetString(0)==DBNull.Value())
Dvs. du skal tjekke for om der blev returneret noget. Hvis der ikke blev, (dvs. password+brugernavn forkert) indeholder din SQLDataReader jo ingenting, og den vil smide en (nullpointer-?) exception.
Avatar billede finger Nybegynder
04. september 2002 - 12:07 #12
ja det så jeg godt. gad bare ikke lige fange den på det tidspunkt :-)
men den er så bare null hvis den ikke fandt noget i databasen?
Avatar billede odegaard Nybegynder
05. september 2002 - 01:21 #13
ja hvis du får nullpointer-exception når du forsøger at hente værdien, så er den vel :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester