De vraag in het kort:
hoe kun je met PHP een $_SESSION-array leegmaken wanneer de sitebezoeker
een tabblad - maar niet de browser - sluit?
===
Nu de lange vorm:
Een webshop met winkelwagen is in ontwikkeling (maatwerk). De webshop
bestaat uit verschillende afdelingen. Er is echter slechts 1 winkelwagen
en 1 kassa. Een huisregel luidt: tijdens e1n sessie is het niet
toegestaan artikelen uit meerdere afdelingen tegelijkertijd in de
winkelwagen te plaatsen (en te bestellen). Het is echter wel toegestaan
met gevulde kar rond te kijken in andere afdelingen.
Om dit te realiseren wordt een sessie-variabele bijgehouden, waarin de
afdeling wordt vastgelegd. Deze vastlegging vindt plaats zodra het eerste
artikel in de kar wordt gelegd. Deze variabele wordt 'schoongepoetst':
- als de bezoeker het enige of laatste artikel uit de winkelkar
verwijdert
- als de bezoeker de bestelling voltooit.
Bovendien wordt alles door de browser weggeknikkerd als de bezoeker de
browser afsluit, maar met toekomstige Session Managers (zoals in FF2.0)
kan ook dat feest wel eens voorbij zijn.
Het probleem:
Nadat een bezoeker enkele artikelen uit Afdeling-A in de winkelwagen
heeft gelegd houdt hij het voor gezien, en drukt op de tabblad-sluitknop.
Het tabblad is weg, maar de browser blijft leven.
Voor zijn gevoel heeft de klant de winkel verlaten!!
Vervolgens opent hij een nieuw tabblad en gaat, bijvoorbeeld middels een
bookmark, naar Afdeling-B van de webshop om een artikel te bestellen.
Nu blijkt dat Firefox de sessie nog steeds heeft openstaan (dit is ook
conform alle documentatie die ik inmiddels heb gelezen). Het PHP-script
leest in de sessie-variabele dat de klant nog bezig is in Afdeling-A, en
staat hem niet toe een artikel uit Afdeling-B in de wagen te leggen.
Dat is technisch misschien correct, maar niet wat ik wil.
Ik zoek naar een oplossing, en zie er een paar:
a. Gooi alle sessie-variabelen weg als de bezoeker het
tabblad sluit of het domein verlaat
b. Sta binnen de winkel niet toe dat een klant een andere
Afdeling binnenstapt met zijn gevulde kar
c. Negeer het probleem...een bezoeker moet maar voldoende
kennis van zaken hebben om te weten dat de sessie op die
manier in leven blijft. Leg dat desnoods op de site uit.
Mijn voorkeur gaat naar oplossing-a, en ik zou een suggestie hoe dat te
realiseren enorm op prijs stellen.
--
Erick

Likes:

Quote