Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

Sessies in de database opschonen

Ger
7 antwoorden
  • Voor mijn site moet je inloggen om er gebruik van te maken. Zoals bij zoveel sites is er ook de mogelijkheid om de login te onthouden.

    Om dit mogelijk te maken, heb ik zoiets in de PHP staan:
      [*:2a898bdab4]Creëer een eigen (non-PHP) sessie id met een random string [*:2a898bdab4]Stop die in een cookie [*:2a898bdab4]Voeg die toe aan een veld in de database (bij de rij van die gebruiker), scheid daarin de id's d.m.v. een puntkomma. [*:2a898bdab4]Vergelijk bij het bezoeken van de pagina de sessie id in de cookie met de waarden in de database. [*:2a898bdab4]Als iemand uitlogt (via de knop) wordt de cookie verwijderd en de bijbehorende sessie id uit de database gehaald.[/list:o:2a898bdab4] Dat werkt goed, maar er is één "probleem". Als iemand zijn cookies handmatig verwijderd, wordt dit natuurlijk niet doorgegeven aan de database. Daar blijft dan een nutteloze sessie id achter die nooit meer gebruikt wordt. Dit is op zich natuurlijk geen ramp (er zijn onuitspreekbaar veel mogelijkheden voor het sessie_id, dus niemand zal het daardoor kunnen hijacken), maar op den duur kan de database hierdoor redelijk vervuild raken. Een mogelijke oplossing die in me opkomt is een aparte tabel aanmaken voor de sessies, en op basis van de sessie kijken welke gebruker daarbij hoort. Nu doe ik dat nog andersom: de sessies worden opgeslagen in de tabel van de gebruikers. Dat omgooien is dus een behoorlijk werkje, en ik vraag me af of iemand hier een andere (simpeler) oplossing voor heeft?
  • ik denk dat het wel meevalt met vervuiling van de db.
    Een andere oplossing is inderdaad een aparte tabel met sessies - met relatie op user_id naar de user_table. Je zal die op een of andere manier schoon moeten houden.
    Je moet dan verlopen sessies verwijderen - wanneer de tijd ingesteld bij de cookie ook is verlopen. Denk erom dat het niet handig is dit bij elke pagina-opvraag te doen; dit vraagt te veel van je resources. Je moet dus zoeken in de richting van scripts die automatisch op de server eens in de zoveel tijd (bijv. een uur) wordt uitgevoerd (hoe heet dat ook weer? - ik maar er zelf nooit gebruik van) of in je script weer iets geavnaceerder bezig gaan dat niet te vaak zon opschoon-query wordt uitgevoerd.

    Hoop dat je hiermee verder kan.
  • [quote:07c8779a04="marientje"]Je moet dus zoeken in de richting van scripts die automatisch op de server eens in de zoveel tijd (bijv. een uur) wordt uitgevoerd (hoe heet dat ook weer? - ik maar er zelf nooit gebruik van)[/quote:07c8779a04]Ik neem aan dat je Cron jobs bedoelt.

    - Bas
  • Ja, aan een aparte tabel voor de sessies en die middels cron regelmatig opschonen zat ik zelf ook al te denken. Nadeel is dat ik daarmee heel de boel moet omgooien. Ik zat op een iets simpeler oplossing te hopen. ;)

    Maar bedankt! :)
  • [quote:f09d577f9a="BasHamar"]Ik neem aan dat je Cron jobs bedoelt.[/quote:f09d577f9a]
    Inderdaad.

    @Ger: een andere oplossing waarbij je de boel niet moet omgooien, kan ik zo niet bedenken. Nogmaals, ik denk dat het wel meevalt met de overbodige data in de user_table. Ik snap alleen niet waarom je verschillende id's er in zet, een user kan toch maar een sessie hebben in principe?
  • [quote:50fffa2789="marientje"]@Ger: een andere oplossing waarbij je de boel niet moet omgooien, kan ik zo niet bedenken. Nogmaals, ik denk dat het wel meevalt met de overbodige data in de user_table. Ik snap alleen niet waarom je verschillende id's er in zet, een user kan toch maar een sessie hebben in principe?[/quote:50fffa2789]Niet als men ingelogd wil blijven en vanaf de computer op het werk, de computer thuis, de laptop thuis etc. regelmatig gebruik maakt van de site. Dan zijn er aan die user meerdere sessies gekoppeld. En als er vanaf die plaatsen ook door meerdere mensen van de site gebruik gemaakt wordt, dan kun je het ook niet aan een IP koppelen. Je (ik) moet dus een koppeling maken tussen een cookie en een gebruiker in de database.
  • Aangezien je zelf een id voor een sessie kan instellen is er technisch gezien geen reden waarom je verschillende locaties niet dezelfde id's kan geven. Alleen moet je er voor zorgen dat je het qua veiligheid goed aanpakt. Overigens kunnen er wel degelijk goede redenen zijn om elke locatie een eigen id te geven, maar noodzakelijk is het in ieder geval niet.

    - Bas

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.