Avatar billede c-sharp Nybegynder
15. december 2006 - 14:19 Der er 6 kommentarer og
1 løsning

Problem med FormsAuthentication og session

Jeg har et site hvorpå jeg bruger FormsAuthentication, derud over har jeg en masse ekstra oplysninger omkring personen der er logget ind gemt i session. Nu er problemet at de sessioner ikke må blive nedlagt før FormsAuthentication udløber og hvis de gør så skal systemet sørge for at logge brugeren ud.

Hvordan håndtere jeg det?
Avatar billede thrytter Nybegynder
15. december 2006 - 15:31 #1
Bruger ikke Sessions og FormsAuthentication på samme tid, netop for at undgå at det ene objekt overlever det andet.

Plejer at gemme de få brugerdata, eks. id og navn i parameteren userName til funktionskaldet RedirectFromLoginPage.

Har følgende kode (eksempel) i min loginfunktion.

Dim sSessionData(1) As String
Dim sAuthData As String
Dim i As String

sSessionData(0) = iUserId.ToString
sSessionData(1) = sUserName

For i = 0 To sSessionData.Length - 1
  sAuthData += sSessionData(i).ToString
  sAuthData += "¤"
Next

FormsAuthentication.RedirectFromLoginPage(sAuthData, False)

Derudover 2 små funktioner til returnering af UserId og UserName

Shared ReadOnly Property UserId() As Integer
  Get
    Dim sSessionData As String()

    If System.Web.HttpContext.Current.User.Identity.IsAuthenticated Then
      sSessionData = System.Web.HttpContext.Current.User.Identity.Name.Split("¤"c)
      UserId = Convert.ToInt32(sSessionData(0))
    Else
      UserId = Nothing
    End If
  End Get
End Property

Shared ReadOnly Property UserName() As String
  Get
    Dim sSessionData As String()

    If System.Web.HttpContext.Current.User.Identity.IsAuthenticated Then
      sSessionData = System.Web.HttpContext.Current.User.Identity.Name.Split("¤"c)
      UserName = sSessionData(1)
    Else
      UserName = Nothing
    End If
  End Get
End Property
Avatar billede c-sharp Nybegynder
15. december 2006 - 17:17 #2
Hej Thrytter

Det løser desværre ikke mit problem, jeg har 2 objecter der ligger i session!
Avatar billede dr_chaos Nybegynder
15. december 2006 - 21:09 #3
Kan du ikke bruge Session_End i global.asax.
Kalde logout på formsauth. hvis sessionen løber ud.
Og kalde
//luk alle session og log bruger af.
            //Send bruger til login.aspx med meddelelser om at brugeren er logget af
            Session.Abandon();
            FormsAuthentication.SignOut();
Avatar billede snepnet Nybegynder
16. december 2006 - 12:17 #4
Kan du ikke bare sørge for at sætte udløbstiderne så de passer ... F.eks. at din authentication udløbe 2 min. før din session (den er default sat til 30 minutter).

chaos->Session_End spiller kun hvis du benytter inproc sessionstate.

<system.web>
    <authentication mode="Forms">
          <forms timeout="15"/>
    </authentication>
</system.web>

Mvh
Avatar billede c-sharp Nybegynder
16. december 2006 - 14:15 #5
Hvis det ikke kan blive anderledes må snepnets løsning jo blive svaret på mit spørgsmål :-)

I skal alle have mange tak for jeres forslag! snetpnet smid et svar, så er der point.
Avatar billede thrytter Nybegynder
16. december 2006 - 14:35 #6
Syntes nu også at løsningen fra dr_chaos burde overvejes, så du sikrer at begge objekter har samme levetid.

Husk også på at dine Sessions dør ved upload til bin-mappen eller ved opdatering af web.config. Ikke særlig smart, hvis man udvikler på et projekt som har andre brugere end en selv.

Har på et tidligere tidspunkt overvejet at bruge forslaget fra dr_chaos, men kunne ikke lige få det til at spille helt som ønsket.
Avatar billede c-sharp Nybegynder
27. december 2006 - 22:32 #7
Mine sesioner bruger StateServer også virker dr_chaos forslag vist desværre ikke. jeg er helt enig i at det havde været en bedre løsning!
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