|
| Kan man få et signal når en session slutte~ Fra : Bertel Lund Hansen |
Dato : 25-11-08 14:39 |
|
Hej alle
Findes der i PHP en måde at få besked på når en session afsluttes
f.eks. ved at brugeren lukker sin browser?
Mit problem er at der opsamles nogle data undervejs, og de skal
skrives til en fil, men først når sessionen er slut.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Dan Storm (25-11-2008)
| Kommentar Fra : Dan Storm |
Dato : 25-11-08 15:09 |
|
Bertel Lund Hansen skrev:
> Hej alle
>
> Findes der i PHP en måde at få besked på når en session afsluttes
> f.eks. ved at brugeren lukker sin browser?
>
> Mit problem er at der opsamles nogle data undervejs, og de skal
> skrives til en fil, men først når sessionen er slut.
>
Du skal nok kigge på
<url: http://dk.php.net/manual/en/function.session-set-save-handler.php>
Jeg har ikke selv rodet med det, men jeg kunne forestille mig det var
den vej....
--
Dan Storm - storm at err0r dot dk / http://err0r.dk
Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!
| |
Anders Wegge Keller (25-11-2008)
| Kommentar Fra : Anders Wegge Keller |
Dato : 25-11-08 18:23 |
|
Bertel Lund Hansen <unospamo@lundhansen.dk> writes:
> Findes der i PHP en måde at få besked på når en session afsluttes
> f.eks. ved at brugeren lukker sin browser?
HTTP er stateless, så det kan ikke lade sig gøre.
> Mit problem er at der opsamles nogle data undervejs, og de skal
> skrives til en fil, men først når sessionen er slut.
Skriv dem løbende hver gang din session bliver gemt. Der er en
callback i session_saet_save_handler. Og bagved skal du så have et
cronjob der checker for gemte filer der er ældre end din max-age på
session.
--
/Wegge
| |
Dan Storm (25-11-2008)
| Kommentar Fra : Dan Storm |
Dato : 25-11-08 19:43 |
|
Anders Wegge Keller skrev:
> Skriv dem løbende hver gang din session bliver gemt. Der er en
> callback i session_saet_save_handler. Og bagved skal du så have et
> cronjob der checker for gemte filer der er ældre end din max-age på
> session.
Hvorfor ikke løse det via garbage-collectoren?
--
Dan Storm - storm at err0r dot dk / http://err0r.dk
Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- SÃ¥ vigtig er du heller ikke!
| |
Bertel Lund Hansen (25-11-2008)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 25-11-08 19:52 |
|
Anders Wegge Keller skrev:
> Skriv dem løbende hver gang din session bliver gemt. Der er en
> callback i session_saet_save_handler. Og bagved skal du så have et
> cronjob der checker for gemte filer der er ældre end din max-age på
> session.
Tak for rådet. Det rammer dog ikke mit problem. Jeg har noget der
virker: Jeg gemmer en status hver gang brugeren foretager et
valg. Jeg ville bare vide om jeg kunne opsamle data i nogle
sessionsvariable og så nøjes med kun at gemme én gang til sidst.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Anders Wegge Keller (25-11-2008)
| Kommentar Fra : Anders Wegge Keller |
Dato : 25-11-08 19:55 |
|
Dan Storm <shadyz_REMOVETHIS_@err0r.dk> writes:
> Anders Wegge Keller skrev:
>> Skriv dem løbende hver gang din session bliver gemt. Der er en
>> callback i session_saet_save_handler. Og bagved skal du så have et
>> cronjob der checker for gemte filer der er ældre end din max-age på
>> session.
> Hvorfor ikke løse det via garbage-collectoren?
Har man besøgende nok, kan man også gøre det. Men da garbage
collection kører på et nondeterministisk tidspunkt, er det tilfældigt
hvor lang tid der går. Hvis man kun har 100 eller færre besøgende om
dagen, bliver der i gennemsnit kun kørt GC en gang i døgnet, medmindre
man begynder at pille ved session.gc_probability og
session.gc_divisor.
Den anden metode kræver lidt mere arbejde, men er til gengæld
deterministisk.
--
/Wegge
| |
Dan Storm (26-11-2008)
| Kommentar Fra : Dan Storm |
Dato : 26-11-08 08:34 |
|
Anders Wegge Keller skrev:
> Har man besøgende nok, kan man også gøre det. Men da garbage
> collection kører på et nondeterministisk tidspunkt, er det tilfældigt
> hvor lang tid der går. Hvis man kun har 100 eller færre besøgende om
> dagen, bliver der i gennemsnit kun kørt GC en gang i døgnet, medmindre
> man begynder at pille ved session.gc_probability og
> session.gc_divisor.
Nu var problemstillingen jo ikke så specific, men det kunne vel tænkes
at det ikke var vigtigt at dataene kun kommer ind en gang i døgnet, hvis
det blot er for at lagre? Nu har OP ihvertfald fået lidt at arbejde med,
så må det vel være hans opgave at vurdere om han kan 'nøjes'.
--
Dan Storm - storm at err0r dot dk / http://err0r.dk
Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- SÃ¥ vigtig er du heller ikke!
| |
Bertel Lund Hansen (26-11-2008)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 26-11-08 09:03 |
|
Dan Storm skrev:
> Nu var problemstillingen jo ikke så specific, men det kunne vel tænkes
> at det ikke var vigtigt at dataene kun kommer ind en gang i døgnet, hvis
> det blot er for at lagre?
Det drejer sig om en forenklet statistik over hvilke sider der
bliver besøgt. Min nuværende løsning består i at der gemmes en
revideret fil hver gang brugeren vælger en ny side.
Det ville mindske filarbejdet hvis jeg kunne opsamle de besøgte
sider i et array og så først gemme når brugeren var færdig.
Nu er jeg ved at lave en databaseløsning fordi jeg regner med
dels at det er mere diskeffektivt, og dels at det vil aflaste
webserveren.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Stig Johansen (26-11-2008)
| Kommentar Fra : Stig Johansen |
Dato : 26-11-08 18:02 |
|
Bertel Lund Hansen wrote:
> Det drejer sig om en forenklet statistik over hvilke sider der
> bliver besøgt. Min nuværende løsning består i at der gemmes en
> revideret fil hver gang brugeren vælger en ny side.
>
> Det ville mindske filarbejdet hvis jeg kunne opsamle de besøgte
> sider i et array og så først gemme når brugeren var færdig.
>
> Nu er jeg ved at lave en databaseløsning fordi jeg regner med
> dels at det er mere diskeffektivt, og dels at det vil aflaste
> webserveren.
Jeg har, sammen med Rune, lavet en 'statistik', dog baseret på ASP.
Netop, som du siger, skal den være effektiv (og simpel).
Løsningen blev en lille include fil, der logger aktivitet i en logfil, der
bliver navngivet som log.Y.M.D.txt
På den måde eksisterer der kun een logfil pr. døgn.
Når 'dagen er omme' har vi et system der kan loade loggen ind i databasen,
hvor man efterfølgende kan lave 'gymnastik' i den.
Blot et forslag til en løsning.
--
Med venlig hilsen
Stig Johansen
| |
Anders Wegge Keller (25-11-2008)
| Kommentar Fra : Anders Wegge Keller |
Dato : 25-11-08 20:02 |
|
Bertel Lund Hansen <unospamo@lundhansen.dk> writes:
> Tak for rådet. Det rammer dog ikke mit problem. Jeg har noget der
> virker: Jeg gemmer en status hver gang brugeren foretager et
> valg. Jeg ville bare vide om jeg kunne opsamle data i nogle
> sessionsvariable og så nøjes med kun at gemme én gang til sidst.
SÃ¥ er der ikke rigtigt andet en GC, men se mine forbehold overfor den
løsning i <news:87wserd4b7.fsf@huddi.jernurt.dk>.
--
/Wegge
| |
Bertel Lund Hansen (25-11-2008)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 25-11-08 20:06 |
|
Anders Wegge Keller skrev:
> Så er der ikke rigtigt andet en GC, men se mine forbehold overfor den
> løsning i <news:87wserd4b7.fsf@huddi.jernurt.dk>.
Det dur slet ikke.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Anders Wegge Keller (26-11-2008)
| Kommentar Fra : Anders Wegge Keller |
Dato : 26-11-08 09:27 |
|
Dan Storm <shadyz_REMOVETHIS_@err0r.dk> writes:
> Nu var problemstillingen jo ikke så specific, men det kunne vel
> tænkes at det ikke var vigtigt at dataene kun kommer ind en gang i
> døgnet, hvis det blot er for at lagre? Nu har OP ihvertfald fået
> lidt at arbejde med, så må det vel være hans opgave at vurdere om
> han kan 'nøjes'.
Jeg har nogle designmæssige problemer med at persistere på det
tidspunkt, men du har ret i at det kan være en acceptabel løsning i
visse tilfælde. Man skal dog lige på forhånd være klar over hvilke
fælder der er:
For det første bliver der aldrig kørt garbage collection, hvis man
har en session.save_path = "N;/path", hvor N er større end 1. php kan
ikke finde ud af at traversere directory-strukturen, så man skal lave
garbage collection selv i det tilfælde. Og da det sker udenom php,
bliver gc-handleren aldrig kaldt.
Der er en næsten tilsvarende problematik på en debian apache. Her kan
apache ikke læse sessionstorage af sikkerhedshensyn. Så selv med et
fladt layout, kommer der heller ikke til at ske noget meningsfyldt
der, medmindre man sætter en specific session.save path op, der peger
et andet sted hen.
Det første punkt får mig til at opfatte garbage collection som en
lidt forældreløs feature, og det andet viser at man ikke bare skal
gribe til at bruge den model, uden at have sat sig ind i hvordan
tingene er sat up. SÃ¥ jeg vil stadig ikke anbefale at bruge den metode
til at persistere.
--
/Wegge
| |
Carsten (26-11-2008)
| Kommentar Fra : Carsten |
Dato : 26-11-08 11:29 |
|
"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:gpvni4t3k5no57kdf1ecbgq3nennoom8c9@news.stofanet.dk...
> Findes der i PHP en måde at få besked på når en session afsluttes
> f.eks. ved at brugeren lukker sin browser?
ikke skudsikker, men javascript onunload kan måske bruges ...
http://www.w3schools.com/jsref/jsref_onunload.asp
Carsten
| |
Bertel Lund Hansen (26-11-2008)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 26-11-08 12:19 |
|
Carsten skrev:
> ikke skudsikker, men javascript onunload kan måske bruges ...
Tak for ideen, men JavaScript er helt ubrugeligt. Det drejer sig
om en optælling der foregår på serveren. JavaScript kører kun
lokalt på klienten.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Carsten (26-11-2008)
| Kommentar Fra : Carsten |
Dato : 26-11-08 12:28 |
|
"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:v3cqi4d9jtmc6e964943f02c3lrpfp01v0@news.stofanet.dk...
> Carsten skrev:
>
>> ikke skudsikker, men javascript onunload kan måske bruges ...
>
> Tak for ideen, men JavaScript er helt ubrugeligt. Det drejer sig
> om en optælling der foregår på serveren. JavaScript kører kun
> lokalt på klienten.
ja tak, jeg ved godt at din kode kører på serveren, men der er jo ikke noget
i vejen for at det javascript du laver til "onUnLoad" lige fyrer en server
request af !!
Carsten
| |
Bertel Lund Hansen (26-11-2008)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 26-11-08 13:02 |
|
Carsten skrev:
> ja tak, jeg ved godt at din kode kører på serveren, men der er jo ikke noget
> i vejen for at det javascript du laver til "onUnLoad" lige fyrer en server
> request af !!
Derudover - så vidt jeg kunne se på den side du linkede til - så
aktiveres onUnLoad hver gang man skifter side. Det giver samme
resultat som nu.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Carsten (26-11-2008)
| Kommentar Fra : Carsten |
Dato : 26-11-08 14:07 |
|
"Bertel Lund Hansen" <unospamo@lundhansen.dk> skrev i en meddelelse
news:pieqi456q85uit5gdh5nr991m4098vpp6q@news.stofanet.dk...
> Carsten skrev:
>
>> ja tak, jeg ved godt at din kode kører på serveren, men der er jo ikke
>> noget
>> i vejen for at det javascript du laver til "onUnLoad" lige fyrer en
>> server
>> request af !!
>
> Derudover - så vidt jeg kunne se på den side du linkede til - så
> aktiveres onUnLoad hver gang man skifter side. Det giver samme
> resultat som nu.
Korrekt... jeg har set det brugt på et site (som jeg ikke husker mere). Fra
hovedvinduet åbnede de et vindue med size 0,0 hvori "onUnload" koden var.
Når brugeren så lukkede sin browser så trak hovedvinduet jo det "usynlige"
vindue med sig og så blev onUnload kaldt (og dermed kun een gang).
Carsten
| |
Bertel Lund Hansen (26-11-2008)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 26-11-08 15:20 |
|
Carsten skrev:
> Korrekt... jeg har set det brugt på et site (som jeg ikke husker mere). Fra
> hovedvinduet åbnede de et vindue med size 0,0 hvori "onUnload" koden var.
> Når brugeren så lukkede sin browser så trak hovedvinduet jo det "usynlige"
> vindue med sig og så blev onUnload kaldt (og dermed kun een gang).
Det er lidt fikst, men brugeren kan have spærret for den slags.
Jeg kikker på andre løsninger.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Anders Wegge Keller (26-11-2008)
| Kommentar Fra : Anders Wegge Keller |
Dato : 26-11-08 12:34 |
|
"Carsten" <carsten@noexists.dk> writes:
> ja tak, jeg ved godt at din kode kører på serveren, men der er jo
> ikke noget i vejen for at det javascript du laver til "onUnLoad"
> lige fyrer en server request af !!
Hvor meget kan man egentlig regne med den? Hvis netværksforbindelsen
ryger, eller browseren crasher, er den selvsagt ikke til megen gavn,
men hvad hvis man bare lukker hele browseren?
--
/Wegge
| |
Anders Wegge Keller (26-11-2008)
| Kommentar Fra : Anders Wegge Keller |
Dato : 26-11-08 18:08 |
|
Stig Johansen <wopr.dk@gmaill.com> writes:
> Løsningen blev en lille include fil, der logger aktivitet i en
> logfil, der bliver navngivet som log.Y.M.D.txt
> På den måde eksisterer der kun een logfil pr. døgn.
> NÃ¥r 'dagen er omme' har vi et system der kan loade loggen ind i
> databasen, hvor man efterfølgende kan lave 'gymnastik' i den.
Hvorfor så ikke bare analysere webserverens logfil?
--
/Wegge
| |
Stig Johansen (27-11-2008)
| Kommentar Fra : Stig Johansen |
Dato : 27-11-08 06:44 |
|
Anders Wegge Keller wrote:
> Stig Johansen <wopr.dk@gmaill.com> writes:
>> Når 'dagen er omme' har vi et system der kan loade loggen ind i
>> databasen, hvor man efterfølgende kan lave 'gymnastik' i den.
>
> Hvorfor så ikke bare analysere webserverens logfil?
Af 2 årsager.
Den ene er, at siden ligger hos UnoEuro, hvor der ikke er direkte adgang til
logfilen.
Den anden årsag er, at serverens logfil ikke er detaljeret nok.
Formålet var at lave en dybdeanalyse af bot'er og deres formodede adfærd.
For at kunne skelne mellem bot'er og brugere, har vi brug for nogle flere
logningoplysninger end webserveren normalt tilbyder.
Felter som Accept, Accept-Encoding osv.
--
Med venlig hilsen
Stig Johansen
| |
Anders Wegge Keller (27-11-2008)
| Kommentar Fra : Anders Wegge Keller |
Dato : 27-11-08 07:41 |
|
Stig Johansen <wopr.dk@gmaill.com> writes:
> Anders Wegge Keller wrote:
>
>> Stig Johansen <wopr.dk@gmaill.com> writes:
>>> NÃ¥r 'dagen er omme' har vi et system der kan loade loggen ind i
>>> databasen, hvor man efterfølgende kan lave 'gymnastik' i den.
>>
>> Hvorfor så ikke bare analysere webserverens logfil?
> Af 2 årsager. Den ene er, at siden ligger hos UnoEuro, hvor der
> ikke er direkte adgang til logfilen.
Det må kaldes en ret vægtig begrundelse.
--
/Wegge
| |
|
|