Avatar billede Mik2000 Professor
06. september 2018 - 16:30 Der er 6 kommentarer og
1 løsning

Forlader domæne PHP/javascript spørgsmål

Jeg gemmer noget data i en database med PHP - ligger der midlertidigt og skal være der da det optager en plads.

Jeg vil gerne kunne slette det hvis:
1 Bruger forlader mit domæne
2 Bruger lukker browser
3 Der går over en hvis tid

Nummer 3 er lige til, men er der mulighed for 2 og 3 også uden at skulle lave et cronjob?
Avatar billede Slater Ekspert
06. september 2018 - 17:46 #1
Nej.

Godt nok er der en onbeforeunload event som udføres når brugeren navigerer væk fra en side, men eftersom al Javascript stoppes så snart de er væk, kan den ikke bruges til at sende et AJAX-request til serveren. Fra serverens side er det umuligt at se om nogen er inde på siden nu - sådan fungerer websites bare ikke.

Din eneste mulighed vil være at konstant, altså hver få sekunder, sende et request til serveren for at fortælle at brugeren stadig er der, og når det holder op med at komme, ved serveren at brugeren er væk. Men det giver sig selv at det ikke er en optimal løsning.
Avatar billede Mik2000 Professor
07. september 2018 - 21:27 #2
Havde det godt lidt på fornemmelsen.
Tænkte bare det kunne være der var en løsning, for der måtte jo være andre i samme situation

Kan man serverside gøre noget når en session forsvinder (bruger lukker browser f.eks. eller den udløber) - således at den trigges når session forsvinder uanset grund?
Avatar billede Slater Ekspert
08. september 2018 - 08:23 #3
Når browseren lukkes er det kun klientens session token (som regel cookie) der bliver slettet. Dataene på serveren ligger der stadig til de bliver ryddet op efter et stykke tid. Så det ændrer ikke dit problem.
Avatar billede Mik2000 Professor
08. september 2018 - 23:46 #4
Hvis man så forstiller sig shops hvor de f.eks. lader en vare være reserveret i 30 minutter fra man lægger den i vognen - hvordan gør de så det?

Er det cronjobs der står og kører hele tiden, eller er der noget smartere?
Avatar billede Slater Ekspert
09. september 2018 - 00:09 #5
Det kommer jo an på hvordan systemet virker - jeg ved ikke helt hvad du mener med "reserveret" - men normalt vil det jo bare være, at når brugeren lægger noget i kurven, bliver det gemt med et timestamp - og når brugeren så opdaterer siden eller går ind på den igen, tjekker siden om der er gået mere end 30 minutter siden den tid, og hvis der er, bliver varen slettet og ikke vist for kunden igen.
Så kan man samtidig også have noget oprydning på et cronjob, der helt sletter alle ikke-købte varer der er mere end 30 minutter gamle, så de ikke fylder i databasen, men det behøver kun ske meget sjældent, f.eks. en gang om dagen.
Avatar billede Mik2000 Professor
09. september 2018 - 13:56 #6
Ved f.eks. billetter er der mange systemer der laver det sådan at når du lægger et produkt i kurven, så har du det reserveret i 15 minutter.

Det betyder at de formentlig har gemt noget i databasen der skal slettes efter 15 minutter hvis ikke brugeren har lavet købet.

Det kan jo godt laves med cronjobs, men så skal de jo køre hele tiden. For hvis en person smider noget i kurven, og derefter forlader siden, så vil man jo ikke med en tæller eller lign. kunne slette det efter 15 minutter, og varen skal jo samtidige blive tilgængelig igen på siden hurtigt igen så andre kan købe det.

Tænkte bare om der i de tilfælde var et smartere alternativ end at have et cronjobs kørende konstant.
Avatar billede Slater Ekspert
09. september 2018 - 16:59 #7
En reservation i så fald betyder jo bare at andre ikke kan købe det. Dvs. det er kun nødvendigt at tjekke når andre mennesker tjekker om de kan købe billetten.

Det er helt sikkert lavet som beskrevet: når du reserverer noget, bliver det gemt i en database med et timestamp, og når en anden bruger så tjekker om den plads er ledig, spørges databasen om pladsen enten slet ikke er reserveret, eller reservationen er foretaget for over 15 minutter siden.
Ingen cronjobs nødvendige, logikken sker når nogen spørger på det. Det ville være spild af beregninger at gøre det hele tiden, når ingen skulle bruge informationen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester