Archief - PHP: Session garbage collection

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Lashknife

Legacy Member
Hoi, voor onze clansite heb ik een login script gemaakt dat bij het binnenkomen op onze domain kijkt of je een cookie met valid info in hebt of niet (zoja, logged on en info uit de cookie wordt omgezet in sessieinfo - met extra checks zodat er geen cookie hacking is enzo tenzij je mijn werkwijze kent natuurlijk)

anders toon ik op elke page gewoon het login gedeelte.

ik heb hier nooit last mee gehad, omdat ik eigenlijk niet bij de garbage collection expire time van de sessie heb nagedacht en dus nooit langer dan de expire time op 1 page zit waardoor mijn sessie zou vervallen.

Nu heb ik voor op het werk evengoed een systeempje geschreven waarbij je altijd eerst moet inloggen en dan slaat hij je logged-on status op in een sessie (browser sluiten = sessie weg).
Maar als een user nu een formulier aan het invullen is, en hij neemt ondertussen lunchpauze ofzo, dan komt hij terug, vult de rest in, drukt op submit en hopsa, sessie expired -> info niet opgeslagen en heel het form is leeg...

Hoe kan ik ervoor zorgen dat mijn sessie toch blijft bestaan? (maw: dat hij het terug oppikt? (cookies zijn mogelijk, maar ik wil natuurlijk niet echt de hele sessie info in een cookie opslaan om die dan bij het expiren in een nieuwe sessie te stoppen waarmee hij zou kunnen doorgaan...)

heb al wat rondgesurft op php sites enzo, maar kvind er toch niet genoeg info over die me dit probleem uitleggen (sorry als ik ni exact naar het juist gezocht heb wegens gebrek aan terminologie)

killgore

Legacy Member
ini_set("session.gc_maxlifetime",HEEL_HOOG_GETAL);
ini_set("session.cookie_lifetime",0);

sessiecookie vervalt pas bij browser sluiten
sessiedata vervalt pas bij cookieverval of na HEEL_HOOG_GETAL seconden. Eigenlijk blijft het wel bestaan bij cookieverval, maar geen enkele user heeft er nog een geldig ID voor (in principe).

Lashknife

Legacy Member
mja helaas is dit ook mijn huidige reeds in werking zijnde oplossing, gc uitstellen :/

shit, dacht mss, door een cookie te maken en dan te zien bij de submit als de sessie vervallen is, of ik niet via die gestorede cookie kon zien welke sessie het was en eventueel data kon overzetten tussen sessies, maar vermits ik dan ook eerst alle data moet opslaan (elke keer voor ik een post evalueer om te zien of de sessie nog in orde is...) is dit wel overhead :/

Andere oplossing waar ik aan dacht is een javascript timer (die ingesteld staat om over GC_TIJD - x minuten) die een popup oproept waarin enkel de sessie vernieuwd wordt door enkel session_start op te roepen en de popup te sluiten (zoiets als de "send receipt alert" hier opt forum)
maar dan moet javascript wel enabled zijn overal (da's nu ook geen prob, want anders werkt de halve site niet meer, ma soit...

medic

Legacy Member
gewoon $_SESSION in een cookie zetten en dan op elke pagina deze check

<?
if(!isset($_SESSION)) $_SESSION=$sessie_uit_koekje; else schrijfsessienaarkoekje();
?>

Lashknife

Legacy Member
ja, maar als de gc de sessie heeft opgeruimd als die expired is, dan mag ik toch eender welke sessie in mijn cookie hebben steken, ze bestaat dan toch niet meer op de server? (alle, zou ik toch denken, waarvoor dien gc anders :unsure: )

en ik moet mezelf tegenspreken als ik denk bij een submit nog snel even de juiste user info op te vragen voor ze expired terwijl ze eigenlijk al lang expired is... (wat op te vangen valt door de user in een temp cookie te stoppen)
Dit ter correctie van mijn reply (#2)

DarkBone

Legacy Member
hash bijhouden in cookie, checken ten opzichte van een tabel met ingelogde users, komt hash door ook in voor -> opnieuw inloggen -> verdere verwerking formulier

medic

Legacy Member
Lashknife zei:
ja, maar als de gc de sessie heeft opgeruimd als die expired is, dan mag ik toch eender welke sessie in mijn cookie hebben steken, ze bestaat dan toch niet meer op de server? (alle, zou ik toch denken, waarvoor dien gc anders :unsure: )

en ik moet mezelf tegenspreken als ik denk bij een submit nog snel even de juiste user info op te vragen voor ze expired terwijl ze eigenlijk al lang expired is... (wat op te vangen valt door de user in een temp cookie te stoppen)
Dit ter correctie van mijn reply (#2)

Nee kijk, ge stored gewoon heel uwen $_SESSION-array in zo'n koekje. Als de sessie expired gaat ge wel niet meer dezelfde sessie-id hebben, maar wel een identieke sessie met een andere sessie-id.

killgore

Legacy Member
Secondje: why the fuck uw session-array in een cookie steken???? dan kunde toch evengoed gewoon met cookies gaan werken.

Dit is imho een hoogst onveilige methode !!!

ik zou eerder men sessie-data in de mysql db opslaan (bij die formulieren he ;)). En een key aan de url toevoegen (of in een cookie steken). Tijdelijk je eigen sessie-systeempje maken dus.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan