[ASP.NET] Bug in authenticationTicket?

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ik maak in m'n ASP.NET applicatie gebruik van forms-authentication.

Ik heb dus een login-pagina waar ik een user laat inloggen. Indien de user kan ge-authenticeerd worden, dan maak ik een authentication ticket.
Dat ticket schrijf ik dan weg als cookie.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
FormsAuthenticationTicket    authTicket;

authTicket = new FormsAuthenticationTicket (1,
                                            _userInfo.UserName,
                                            DateTime.Now,
                                            DateTime.MaxValue,
                                            true,
                                            _userInfo.UserId.ToString());

HttpCookie authCookie = new HttpCookie (FormsAuthentication.FormsCookieName);
authCookie.Value = FormsAuthentication.Encrypt (authTicket);

Response.Cookies.Add (authCookie);


In de constructor van het authenticationticket zie je een aantal argumenten:
DateTime.Now is de waarde die ik meegeef als issue-date
DateTime.MaxValue is de expiration date van het ticket -> dat is dus never.
true geeft aan dat het ticket persistent moet zijn.

Nu, als ik m'n sessie afsluit, is het cookie toch weg. Het is dus blijkbaar toch vervallen alhoewel ik aan m'n ticket meegeef dat het nooit mag vervallen.

Nu is mijn probleem opgelost als ik aan m'n cookie ook nog eens de expiration date meegeef:
code:
1
authCookie.Expires = DateTime.MaxDate;


Is het nu verkeerd van mij om te stellen dat dit eigenlijk niet nodig zou mogen zijn, omdat ik dat die gegevens aan m'n authentication ticket meegeef, of denk ik gewoon verkeerd en mag ik de expiration date van het ticket en de expiration date van de cookie niet met elkaar vergelijken / verwarren ?

https://fgheysels.github.io/


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Lijkt mij logisch dat het ene object de duur van de andere niet mag beïnvloeden.
Je kan je cookie ook alleen voor de duur van de sessie willen gebruiken en dan zou je extra code moeten toevoegen om de cookie toch te vernietigen omdat anders het cookie bewaard blijft omdat er een object in het cookie zit dat bewaard moet worden.

Niet dat ik iets van .NET weet maar als de cookie op basis van het hele ticket object gemaakt werd dan zou ik inderdaad ook verwachten dat de datum goed staat maar het lijkt alsof alleen een string met de naam wordt gebruikt.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik vindt het zowiezo logisch dat dit gebeurt. Want hoe moet het Framework anders weten wat de expiration time is van het cookie. Je verteld het cookie namelijk nergens dat het een authticket is. Anders hadden ze mischien in FormsAuthenticationTicket een methode moeten geven van CreateTicketCookie ofzo die dan voor jou het cookie aanmaakt met de gewenste value en Expiration time. Het Cookie weet nou tenslotte niet dat de value iets met een AuthTicket te maken heeft ( of zowiezo iets van een AuthTicket want daar heeft een cookie eigenlijk niks mee te maken )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Folkert
  • Registratie: September 2001
  • Laatst online: 10-07 07:58
Heb je je timeout vermeld in je web.config? Als deze niet is vermeld blijft je cookie 30 minuten geldig. Althand, het volgt de instelling van je machine.config en dat is geloof ik 30 minuten. Indien je de timeout vermeld in je web.config zal deze de machine.config overrulen.