Avatar billede davidfossil Nybegynder
22. november 2004 - 16:46 Der er 3 kommentarer og
1 løsning

Gem login tidspunkt ved "automatisk login"

Først et udklip af min global.asax.cs, der viser hvordan jeg "fanger" brugere der har gemt deres login (persistant) :

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
    if(Request.IsAuthenticated)
    {
        // Find brugerens ID
        int userID = Convert.ToInt16(User.Identity.Name);

        // Hent brugerens roller fra databasen
        ArrayList roles = new ArrayList();
        foreach(DataRow role in _Data.GetRolesForUser(userID).Tables[0].Rows)
        {
            int levelID = Convert.ToInt16(role["levelID"].ToString());
            while(levelID > 0)
            {
                roles.Add(role["sectionID"].ToString() + levelID);
                levelID--;
            }
        }

        // Konverter ArrayList til string[] array
        string[] rolesArray = new string[roles.Count];
        roles.CopyTo(rolesArray);

        // Tilføj rollerne til en GenericPrincipal for identiteten
        HttpContext.Current.User = new GenericPrincipal(User.Identity, rolesArray);
    }
}


Spørgsmålet: Metoden Application_AuthenticateRequest() bliver eksekveret ved hvert eneste kald. Jeg ønsker at tilføje noget kode (mere præcist en sqlcommand der gemmer tidspunktet for login) ved det første kald i hver session. Kan jeg ikke tjecke om folk har fået tildelt en GenericPrincipal i forvejen, eller om de har flere roller end 0? Eller bliver jeg nødt til at oprette en Session variable som jeg så kan checke eksistensen af, og i så fald hvordan fungerer det hvis folk ikke har tilladt per session cookies?
Avatar billede davidfossil Nybegynder
25. november 2004 - 22:43 #1
Ok, der er ikke kæmpe meget respons her. Situationen er som følger:

Jeg har et debatforum og vil meget gerne kunne vise den enkelte bruger om der er noget nyt i de forskellige tråde. Nogen helt andre bud på hvordan den kan løses, hvis ikke jeg kan registrere hvornår folk logger ind?
Avatar billede burningice Nybegynder
25. november 2004 - 23:15 #2
kan du ikke tjekke på om User er lig null? i så fald er det vel første gang
Avatar billede davidfossil Nybegynder
26. november 2004 - 12:08 #3
Har nu forsøgt at ændre den første linje i metoden til :

if((Request.IsAuthenticated) && (User == null))

Dette resulterer dog blot i at metoden aldrig blevet eksekveret - altså er user aldrig null ... :(

Andre forslag?
Avatar billede davidfossil Nybegynder
29. november 2004 - 19:49 #4
Nu har jeg selv fundet på følgende løsning: (udklip af Global.asax.cs)

protected void Application_AcquireRequestState(Object sender, EventArgs e)
{
    if(HttpContext.Current.User.Identity.IsAuthenticated)
    {
        // Hent oplysning om sidste besøg, hvis LastVisit er null
        if(Session["LastVisit"] == null)
        {
            DataRow userData = _Content.Users._Data.GetUserDetails();
            Session["LastVisit"] = DateTime.Parse(userData["lastVisit"].ToString());
            _Content.Users._Data.IncreaseVisitCount();
        }

        // Gem oplysninger om dette request i databasen
        _Content.Users._Data.SaveVisitTime();
    }
}


En reference som kan være interessant hvis andre har problemer med det samme:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconhandlingpublicevents.asp
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