Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Asp.net: Singleton classes veilig?

Pagina: 1
Acties:
  • 655 views sinds 30-01-2008
  • Reageer

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Hallo allemaal,

Ik gebruik in m'n asp.net 3.5 webapp singleton classes, omdat deze gedurende de gehele sessie actief blijven (en niet bij elke refresh opnieuw geinitializeerd hoeven te worden). Hierin sla ik dus ook authentication gegevens op (is de gebruiker ingelogd? tot welke usergroups hoort deze? etc etc).

Nu vroeg ik mij dus af hoe veilig dit is t.o.v. het traditionele gebruik van session variabelen.

Is het veiliger, onveiliger, of maakt het niets uit?

Ik kan er eerlijk gezegd vrij weinig over vinden.

[ Voor 5% gewijzigd door Laurens-R op 17-01-2008 20:52 ]


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Een singleton blijft niet gedurende de sessie in leven, maar gedurende de hele levensduur van je applicatie. Dus je hebt in totaal maar één instantie van je Singleton klasse. Het zijn dus twee verschillende dingen.

Fat Pizza's pizza, they are big and they are cheezy


  • D-Raven
  • Registratie: November 2001
  • Laatst online: 16-10 10:47
Of het veilig is hangt een beetje af van hoe die singleton verder geimplementeerd is. Daar kan ik dan ook weinig over zeggen.
Of het onverstandig is kan ik wel wat over zeggen. Waarom zou je een singleton klasse schrijven waarin je de dingen wilt gaan regelen die normaal met sessies en bestaande technieken en technologieen al voor je gedaan wordt ?
IMO loop je alleen maar meer risico omdat je meer kans hebt dat je fouten maakt in je code.

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 10-11 17:17
Kun je wat code laten zien? Of 'n ontwerp?
Waar sla je de objecten op?

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Of een singleton class veilig is, ligt ook aan de manier waarop wordt omgegaan met synchronisation issues (threading, locking, etc).

Als je via de singleton class de informatie zelf opslaat in de http pipeline (HttpContext.items) kan het redelijk veilig zijn, maar net zoals Detahraven vraag ik mij af waarom je het uberhaupt op deze manier zou willen. .NET heeft zelf al allerlei providers voor memberships, roles, authorization, sessions, etc. waarvoor je ook zelf een een implementatie kunt schrijven.

En wat doet de singleton class als de http request afgehandeld is? Verdwijnt de informatie dan samen met de HttpContext of wordt deze meer als een sessie bewaard?

If it isn't broken, fix it until it is..


  • Brains
  • Registratie: Oktober 2006
  • Laatst online: 04-03-2024
Inderdaad het hangt af van je implentatie of het veilig is.

Static gedefinieerde singleton's gelden voor je hele applicatie, dus ook voor andere gebruikers (sessions).

Denk dus goed na hoe lang en breed je je gevens wilt bijhouden: per request, per gebruiker of de hele applicatie.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Singletons in asp.net hebben een nadeel: bij recycling van het appdomain heb je 2 instances.

Maar singletons zijn hier toch niet echt nodig? Hij wil gegevens opslaan die in de user-state zitten, daar is de session voor bedoeld.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
EfBe schreef op zondag 20 januari 2008 @ 10:54:
Singletons in asp.net hebben een nadeel: bij recycling van het appdomain heb je 2 instances.
Wij gebruiken ook af en toe singletons in ASP.NET. Ik kan echter nergens vinden hoe het nu precies zit met asp.net. Zou je wat bronnen kunnen geven of uitleg hoe het nu precies zit met singletons en asp.net? Ik krijg namelijk het idee dat die 2 niet erg goed mixen?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • EfBe
  • Registratie: Januari 2000
  • Niet online
4of9 schreef op vrijdag 25 januari 2008 @ 10:06:
[...]
Wij gebruiken ook af en toe singletons in ASP.NET. Ik kan echter nergens vinden hoe het nu precies zit met asp.net. Zou je wat bronnen kunnen geven of uitleg hoe het nu precies zit met singletons en asp.net? Ik krijg namelijk het idee dat die 2 niet erg goed mixen?
Normaliter heeft een asp.net applicatie 1 appdomain op een server. Wanneer de app recycled, heb je even tijdelijk 2 appdomains. Op dat moment zijn er dus in theorie 2 singleton instances. Het is niet zo dat ze contact hebben met elkaar, maar wel dat wanneer je er vanuit gaat dat een shared resource, bv een file, gelockt wordt door 1 singleton, de ander er dus niet bij kan. Een recycle actie duurt meestal maar een paar seconden dus daar heb je niet zo vaak last van, maar het is wel iets om rekening mee te houden. ASP.NET is niet iets anders dan een andere .net app. MS heeft alleen het geheel in een kreupele, ondoorzichtige jas gestoken waardoor het erg complex lijkt.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Ik heb op m'n stage een soortgelijke aanpak gedaan en daar wisten ze me te vertellen dat dit zeker niet te goede zou komen van de performance, ik meen me iets te herinneren dat een WebRequest slechts 2 request tegelijk kan versturen, zodat bij een aantal users simultaan (dus meer dan 2) er dus wel degelijk een bottleneck gevormd wordt. Hoe dan ook ben ik sinds dien afgestapt van het singleton patroon. Vooral omdat het me niet echt een goede O.O. oplossing lijkt.

Ipv zelf authentication te verzorgen, heb je al eens gekeken naar de Membership Api die standaard zit in ASP.NET? Enorm handig hoor...

Hier staat een enorm uitgebreide tutorial :)

http://aspnet.4guysfromrolla.com/articles/120705-1.aspx

[ Voor 20% gewijzigd door Verwijderd op 25-01-2008 17:52 ]


  • barfieldmv
  • Registratie: Maart 2004
  • Laatst online: 10-10 12:36
EvilB2k schreef op donderdag 17 januari 2008 @ 20:51:
Hallo allemaal,

Ik gebruik in m'n asp.net 3.5 webapp singleton classes, omdat deze gedurende de gehele sessie actief blijven (en niet bij elke refresh opnieuw geinitializeerd hoeven te worden). Hierin sla ik dus ook authentication gegevens op (is de gebruiker ingelogd? tot welke usergroups hoort deze? etc etc).

Nu vroeg ik mij dus af hoe veilig dit is t.o.v. het traditionele gebruik van session variabelen.

Is het veiliger, onveiliger, of maakt het niets uit?

Ik kan er eerlijk gezegd vrij weinig over vinden.
Bij de simpelste implementatie maakt het niets uit. Bij complexere implementaties word het lastiger. Het makkelijste is om in het Application object gewoon een gedeeld opbjectje te plaatsen met een simpele read/write lock beveiligingetje.

  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Hallo allemaal,

Ben een tijdje niet meer op het forum geweest, maar ik bedank jullie allen voor jullie reacties! Ik heb er zeker wat aan gehad.

De reden waarom ik voornamelijk singletons wilde gebruiken is omdat ik (naast authenticatie) ook een centraal object wilde hebben wat events afvangt uit andere delen van de applicatie. Dit draait onafhankelijk van de rest van de app en is meer een achtergrond iets. (zit ook hier een daar te experimenteren met threading hiervoor).

edit naar hieronder: Voornamelijk is de belangrijkste reden dat ik wilde zien hoe ver ik met ASP.NET kon gaan. Mogelijkheden verkennen etc. Ik zie vreemd genoeg nog veel programmeurs die alles in de Page_Load event proppen om vervolgens met een blubbertrage site opgescheept te zitten. Het diende meer als verkenningstocht om te kijken hoe ik de performance van dergelijke sites kon opkrikken... want veel dingen hoeven maar 1 keer geinitializeerd te worden (met voorkeur in de global.asax).

Het authorisatie was meer een voorbeeld (wellicht ben ik hier in onduidelijk in geweest), maar het kon in feite op alles slaan wat je centraal gelocaliseerd wilt hebben. Daarnaast was ik ook geintereseerd in hoeverre dit veilig zou zijn t.o.v. sessies e.d.

Wat ik dus sowieso heb geleerd is dat singletons niet handig zijn ivm het recycling proces. Niet dat ik veel dingen doe op het gebied van gedeelde resources etc, maar in mijn filosofie is voorkomen beter dan genezen. Dus als ik dit praktischer kan regelen, dan doe ik dat zeker.

[ Voor 107% gewijzigd door Laurens-R op 06-02-2008 21:49 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:01
Ik wil best geloven dat je er wat aan gehad hebt, maar ik denk dat ik voor de meeste mensen spreek die hier gereageerd hebben, dat we ook best benieuwd zijn naar wat je nu uiteindelijk gedaan hebt ... :)

https://fgheysels.github.io/

Pagina: 1