/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408920
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste