Gå til innhold

ASP: [Løst] FormsAuthenticationTicket med IsPersistent=True forblir ikke pålogget


Anbefalte innlegg

Jeg er skikkelig amatør når det gjelder asp.net, og trenger litt hjelp her. Jeg vil at brukeren (det vil si "jeg") skal forbli innlogget når jeg huker av checkboksen "Forbli innlogget". Lukker jeg nettleseren og åpner den igjen, skal jeg da slippe å logge inn på nytt, typisk som forumet her.

 

Jeg har følgende for å logge inn (hele innloggingssystemet er løst basert på denne turorialen):

    Private Function Login(ByVal user As String, ByVal pass As String, ByVal keeploggedin As Boolean) As String
       If ValidateUser(user, pass) Then
           Dim strRole As String = AssignRoles(user)

           Dim date_howlong As Date = DateTime.Now.AddYears(1)
           Dim fat As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, user, DateTime.Now, date_howlong, keeploggedin, strRole, FormsAuthentication.FormsCookiePath)

           Dim c As New HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(fat))
           Response.Cookies.Add(c)
           Response.Redirect(FormsAuthentication.GetRedirectUrl(user, Nothing))
       Else
           Return "Not logged in! You have entered the wrong username/password..."
       End If

       Return ""
   End Function

... som etter det jeg har forstått herfra skal være riktig hvis man ønsker å legge til roller eller annen data.

 

... og

            Dim id As FormsIdentity = CType(User.Identity, FormsIdentity)
           Dim ticket As FormsAuthenticationTicket = id.Ticket

           Response.Write("IsPersistent: " & ticket.IsPersistent.ToString)

....gir meg "ISPersistent: True, og alt burde være vel.

 

Men lukker jeg nettleseren og åpner den igjen, er jeg blitt logget ut.

 

 

Mens jeg skriver dette slår det meg at jeg ikke sjekker cookie'n når jeg returnerer til siden... men jeg har ikke peiling på hvordan det gjøres? (Jeg trodde vel i utgangspunktet ikke det var nødvendig...)

 

Noen som kan peke ut riktig retning?

På forhånd takk for hjelpen! :)

Lenke til kommentar
Videoannonse
Annonse

Jeg vet ikke hvordan det er med ASP.NET og IIS, men i PHP og Apache er det en config-instilling om sesjonen skal gå ut når man lukker nettleseren.

 

Så hvis det er likt for ASP.NET, og hvis du ikke har kontroll over instillingene til serveren, så kanskje en slik innstilling (hvis den finnes) kan settes fra koden.

 

Happy googeling :p

 

PHP.ini:

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
; http://php.net/session.cookie-lifetime
session.cookie_lifetime = 0

Endret av xibriz
Lenke til kommentar

Du må angi når kjeksen skal utløpe, type

HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.Expires = ticket.Expiration;

eventuelt om du kan legge inn f.eks cookie.Expires = DateTime.Now.AddDays(14)

 

Dette er C#.Net men ganske likt som VB.Net

Lenke til kommentar

Du må angi når kjeksen skal utløpe, type

HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
cookie.Expires = ticket.Expiration;

eventuelt om du kan legge inn f.eks cookie.Expires = DateTime.Now.AddDays(14)

Er det ikke det jeg gjør her da?

Dim fat As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, user, DateTime.Now, date_howlong, keeploggedin, strRole, FormsAuthentication.FormsCookiePath)
Dim c As New HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(fat))

...Expiration ligger jo i Ticket'en. Eller?

 

Jeg kan få fra siden og tilbake igjen innnenfor Expiration Date helt problemfritt, den biten fungerer. Men det gjelder bare helt til jeg lukker nettleseren. Hvis jeg lukker og åpner nettleseren må jeg logge på på nytt... :(

Lenke til kommentar

Du setter for når selve billetten for autentiseringen skal utløpe ja. Men ikke hvor lenge cookien skal være gyldig.

 

Funksjonen FormsAuthentication.Encrypt() gir bare en tekst string som blir lagret i en cookie. Denne gir ingen parametre for hvordan cookien skal opptre med tanke på varighet osv.

Lenke til kommentar

Du setter for når selve billetten for autentiseringen skal utløpe ja. Men ikke hvor lenge cookien skal være gyldig.

 

Funksjonen FormsAuthentication.Encrypt() gir bare en tekst string som blir lagret i en cookie. Denne gir ingen parametre for hvordan cookien skal opptre med tanke på varighet osv.

Ah! Da skal jeg prøve det også. :)

 

EDIT: Du hadde rett! Tusen hjertelig takk for hjelpen! :D

Endret av Moskus
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...