Avatar billede fanatic Nybegynder
29. oktober 2006 - 19:16 Der er 3 kommentarer

Loginform brugerdata gemmes ikke ved redirect.

Hej Eksperter.
Jeg har et problem med at gemme oplysninger om en bruger som logger ind på min website.

Jeg benytter metoden herunder når en bruger indtaster sit brugernavn og password.

protected void btnLogin_Click(object sender, EventArgs e)
    {
        if (txtUsername.Text.Trim() != "" & txtPassword.Text.Trim() != "")
        {
            try
            {
                MessageBoardObjects.User myUser = MessageBoardObjects.User.Validate(txtUsername.Text, txtPassword.Text);
                FormBase objPage;
                objPage = ((FormBase)(this.Page));
                objPage.CurrentUser = myUser;

                Response.Redirect("Default.aspx", false);

            }
            catch (Exception Ex)
            {
                lblError.Text = Ex.Message;
            } 
        }
    }

Jeg har altså en klasse "Formbase" som alle mine webforms arver fra. I denne klasse har jeg også et user-objekt som skal gemme oplysninger om den der logger på. Redirect sørger for at sende brugeren videre til en anden side som starter som herunder:

protected void Page_Load(object sender, EventArgs e)
    {
        if (this.IsLoggedIn == false)
        {
            Response.Redirect("LoginFault.aspx");
        }
        .......

Siden tjekker lige om brugeren er logget ind. Det gør den ved at kalde bool property'en IsLoggedIn fra Formbase som denne webform også arver fra.

Problemet er at IsLoggedIn altid er false?? Når jeg bruger debuggeren så kan jeg se at CurrentUser i Formbase indeholder data lige indtil at redirect er kaldt. Burde Formbase ikke kunne huske værdierne?

Her følger noget kode fra Formbase:

public class FormBase : System.Web.UI.Page
{
    private MessageBoardObjects.User currentUser;

    public MessageBoardObjects.User CurrentUser
    {
        get
        {return currentUser;}
        set
        {
            currentUser = value;
            Session.Add("userid", value.MUserID.ToString());
        }
    }

    public bool IsLoggedIn
    {
        get
        {
            return !(currentUser == null);
        }
    }

Her er filstrukturen:

\App_Code
  Formbase.cs

\Default.aspx
\Login.aspx
Avatar billede dr_chaos Nybegynder
29. oktober 2006 - 19:19 #1
gem dit formbase objekt i en session:

FormBase objPage;
objPage = ((FormBase)(this.Page));
objPage.CurrentUser = myUser;
Session["objPage"]= objPage;
            Response.Redirect("Default.aspx", false);
Avatar billede dr_chaos Nybegynder
29. oktober 2006 - 19:21 #2
Når du skal bruge objektet igen henter du det på denne måde:

FormBase objPage =(FormBase)Session["objPage"];

if (objPage.IsLoggedIn == false)
        {
            Response.Redirect("LoginFault.aspx");
        }
Avatar billede dr_chaos Nybegynder
29. oktober 2006 - 19:23 #3
DU skal sende den samme instans med rundt eller er værdierne nulstillet.
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