|
| Kan en session forsvinde?? Fra : Jakob Munck |
Dato : 13-06-06 17:07 |
|
Jeg har en website (php, Apache-server), hvor bruger logger ind og dermed
startes der en individuel session, hvori står brugerens id-nummer
($_SESSION["id"]). Men jeg har et par gange oplevet noget mærkeligt, idet
der er brugere, for hvem denne session pludselig er forsvundet, hvilket gør
at de pludselig ikke kan gøre det ene og andet.
Men jeg troede at sådanne sessions varede i lige så lang tid, som brugeren
har sin browser åben, altså f.eks. 3 timer, hvis det nu tager så lang tid
for ham at indskrive et brev i en formular.
Men er det rigtigt, at Sessions blive stående så længe at man holder sit
browservindue åbent? Eller kan de være tidsbegrænsede eller forsvinde af
andre årsager??
Gode råd ønskes.
v.h.
Jakob
| |
Michael Rasmussen (13-06-2006)
| Kommentar Fra : Michael Rasmussen |
Dato : 13-06-06 18:02 |
|
On Tue, 13 Jun 2006 18:06:40 +0200, Jakob Munck wrote:
>
> Men er det rigtigt, at Sessions blive stående så længe at man holder
> sit browservindue åbent? Eller kan de være tidsbegrænsede eller
> forsvinde af andre årsager??
http://dk.php.net/manual/da/ref.session.php
Led efter session.gc_maxlifetime
Princippet er, hvis der ikke foregår aktivitet i brugerens browser
indenfor session.gc_maxlifetime, informeres garbage collector om, at
session skal fjernes næste gang, garbage collectoren kører. Hvor lang
tid efter en session er blevet mærket som garbage, og til den rent
faktisk fjernes, er der ikke nogen umiddelbar måde at finde ud af.
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Christoffer (13-06-2006)
| Kommentar Fra : Christoffer |
Dato : 13-06-06 18:21 |
|
"Michael Rasmussen" <mir@miras.org> skrev i en meddelelse
news:pan.2006.06.13.17.02.23.203529@miras.org...
> On Tue, 13 Jun 2006 18:06:40 +0200, Jakob Munck wrote:
>
> >
> > Men er det rigtigt, at Sessions blive stående så længe at man holder
> > sit browservindue åbent? Eller kan de være tidsbegrænsede eller
> > forsvinde af andre årsager??
> http://dk.php.net/manual/da/ref.session.php
> Led efter session.gc_maxlifetime
kan man ikke bruge session_cache_expire til det samme?
http://dk2.php.net/manual/da/function.session-cache-expire.php
| |
Michael Rasmussen (13-06-2006)
| Kommentar Fra : Michael Rasmussen |
Dato : 13-06-06 18:32 |
|
On Tue, 13 Jun 2006 19:21:14 +0200, Christoffer wrote:
> kan man ikke bruge session_cache_expire til det samme?
> http://dk2.php.net/manual/da/function.session-cache-expire.php
Har du læst andet brugerinput fra djmaze (AT) dragonflycms "After
recieving a "bogus" mark on a bug report i've tried to find out the
differences between cache_expire and what was causing a session delete
after 24 minutes.
cache_expire is used for cached session pages and has nothing to do with
the session data
The garbage collector controls the session data and destroys sessions
which are older then 1440 seconds (24 minutes) by default.
So to keep a session alive longer then 24 minutes (for example when a
visitor tries to POST a huge message that took him 1 hour to type), you
must modify the session.gc_maxlifetime thru ini_set()
Somehow i couldn't find anything in the PHP documentation regarding this
and due to that me (and i think many others) got the wrong ideas regarding
PHP sessions. A few examples to fix session timeout are already posted
below but in my opinion they all missed session.gc_maxlifetime"
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Jakob Munck (13-06-2006)
| Kommentar Fra : Jakob Munck |
Dato : 13-06-06 19:52 |
|
> So to keep a session alive longer then 24 minutes (for example when a
> visitor tries to POST a huge message that took him 1 hour to type), you
> must modify the session.gc_maxlifetime thru ini_set()
>
Og da man normalt ikke har adgang til at rette i denne fil på et webhotel,
er der vel ikke andet at gøre end at acceptere, at sessions løber ud efter
24 minutter. Eller kan en site have sin egen, lokale ini_set(), som styrer
den måde siten selv kører, uden at gøre nogen forskel for de andre sites på
serveren?
v.h.
Jakob
> Somehow i couldn't find anything in the PHP documentation regarding this
> and due to that me (and i think many others) got the wrong ideas regarding
> PHP sessions. A few examples to fix session timeout are already posted
> below but in my opinion they all missed session.gc_maxlifetime"
>
> --
> Hilsen/Regards
> Michael Rasmussen
> http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
>
| |
Peter Brodersen (13-06-2006)
| Kommentar Fra : Peter Brodersen |
Dato : 13-06-06 20:08 |
|
On Tue, 13 Jun 2006 20:51:48 +0200, "Jakob Munck"
<jm2_fjern_dette@webspeed.dk> wrote:
>Og da man normalt ikke har adgang til at rette i denne fil på et webhotel,
>er der vel ikke andet at gøre end at acceptere, at sessions løber ud efter
>24 minutter. Eller kan en site have sin egen, lokale ini_set(), som styrer
>den måde siten selv kører, uden at gøre nogen forskel for de andre sites på
>serveren?
Nej, det skal desværre rettes centralt, idet garbage collection
foregår for samtlige sessions.
Jeg undrer mig også over hvorfor tiden er helt nede på 24 minutter.
Mit bedste gæt er, at ham, der satte default-konfigurationen troede at
tiden skulle angives i minutter (1440 minutter = 1 døgn) og ikke i
sekunder.
Én døgn lyder mere som en standardværdi end 24 minutter gør... synes
jeg
Man kan dog lave et stunt, fx med ajax, hvor man får sit script til en
gang i minuttet at hente en php-side, der bruger sessions - fx blot en
tom én til formålet. På den måde bliver ens session holdt i live.
--
- Peter Brodersen
Ugens^WMånedens^WSommerens værktøj - Find vej: www.findvej.dk
Nu med link direkte til en adresse, fx: www.findvej.dk/Bredgade28,1260
| |
Michael Rasmussen (13-06-2006)
| Kommentar Fra : Michael Rasmussen |
Dato : 13-06-06 20:29 |
|
On Tue, 13 Jun 2006 21:08:27 +0200, Peter Brodersen wrote:
>
> Man kan dog lave et stunt, fx med ajax, hvor man får sit script til en
> gang i minuttet at hente en php-side, der bruger sessions - fx blot en tom
> én til formålet. På den måde bliver ens session holdt i live.
Disclaimer, grimt hack:-\
Hvis denne indsætte i html headeren, får man samme effekt - hvis siden
indeholder en formular, der sender data tilbage, kan det ikke anbefales!
<meta http-equiv="refresh" content="1400; URL=<?php echo
$_SERVER['PHP_SELF']?>">
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Johan Holst Nielsen (14-06-2006)
| Kommentar Fra : Johan Holst Nielsen |
Dato : 14-06-06 11:29 |
|
Michael Rasmussen wrote:
> On Tue, 13 Jun 2006 21:08:27 +0200, Peter Brodersen wrote:
>
>
>>Man kan dog lave et stunt, fx med ajax, hvor man får sit script til en
>>gang i minuttet at hente en php-side, der bruger sessions - fx blot en tom
>>én til formålet. På den måde bliver ens session holdt i live.
>
> Disclaimer, grimt hack:-\
>
> Hvis denne indsætte i html headeren, får man samme effekt - hvis siden
> indeholder en formular, der sender data tilbage, kan det ikke anbefales!
>
> <meta http-equiv="refresh" content="1400; URL=<?php echo
> $_SERVER['PHP_SELF']?>">
Well ovenstående kode kan blot hentes i en iframe på siden hvor
formularen ligger... tada - den opdaterer sessionen via iframen - og
hverken formen og data forsvinder ikke :) (men stadig grimt hack :D).
mvh
Johan
| |
Lasse Jensen (15-06-2006)
| Kommentar Fra : Lasse Jensen |
Dato : 15-06-06 12:37 |
|
Peter Brodersen skrev:
>
>
> Nej, det skal desværre rettes centralt, idet garbage collection
> foregår for samtlige sessions.
>
Hejsa...
Jeg undersøgte det lidt nærmere, og jeg fik at vide at det burde være
muligt at ændre indstillingen for sit eget webhotel. Ihvertfald hos
Surftown.dk, hvor jeg ligger, så det var jo meget heldigt.
Så jeg vil egentlig bare spørge om hvordan det skal gøres?
Fordi jeg har faktisk ingen anelse om hvordan man konfigurerer i ini_set()?
På forhånd tak :)
Mvh. Lasse Jensen
| |
Michael Rasmussen (15-06-2006)
| Kommentar Fra : Michael Rasmussen |
Dato : 15-06-06 13:13 |
|
On Thu, 15 Jun 2006 13:36:46 +0200, Lasse Jensen wrote:
> Så jeg vil egentlig bare spørge om hvordan det skal gøres? Fordi jeg
> har faktisk ingen anelse om hvordan man konfigurerer i ini_set()?
Inden du starter din session med session_start(), skal du skrive følgende:
$old_sessionLifeTime = ini_set("session.gc_maxlifetime",
"antal_sekunder_din_session_skal_leve");
if (! $old_sessionLifeTime)
// Det var ikke muligt at ændre session.gc_maxlifetime
echo "Session levetid kunne ikke ændres\n";
Inden din applikation lukker, bør du gøre følgende:
ini_set("session.gc_maxlifetime", $old_sessionLifeTime);
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Lasse Jensen (15-06-2006)
| Kommentar Fra : Lasse Jensen |
Dato : 15-06-06 15:20 |
|
Michael Rasmussen skrev:
>
> Inden du starter din session med session_start(), skal du skrive følgende:
> $old_sessionLifeTime = ini_set("session.gc_maxlifetime",
> "antal_sekunder_din_session_skal_leve");
> if (! $old_sessionLifeTime)
> // Det var ikke muligt at ændre session.gc_maxlifetime
> echo "Session levetid kunne ikke ændres\n";
>
> Inden din applikation lukker, bør du gøre følgende:
> ini_set("session.gc_maxlifetime", $old_sessionLifeTime);
>
Mange tak for svaret. Jeg kigger lige på det :)
Mvh. Lasse Jensen
| |
Lasse Jensen (15-06-2006)
| Kommentar Fra : Lasse Jensen |
Dato : 15-06-06 16:21 |
|
Michael Rasmussen skrev:
>
> Inden du starter din session med session_start(), skal du skrive følgende:
> $old_sessionLifeTime = ini_set("session.gc_maxlifetime",
> "antal_sekunder_din_session_skal_leve");
> if (! $old_sessionLifeTime)
> // Det var ikke muligt at ændre session.gc_maxlifetime
> echo "Session levetid kunne ikke ændres\n";
>
> Inden din applikation lukker, bør du gøre følgende:
> ini_set("session.gc_maxlifetime", $old_sessionLifeTime);
>
Hey Michael.
Jeg er ikke helt sikker på jeg ved hvad du mener med jeg skal have
følgende inden min applikation lukker:
ini_set("session.gc_maxlifetime", $old_sessionLifeTime);
Hvor vil det sige helt præcist?
Skal det stå sådan her;
$old_sessionLifeTime = ini_set("session.gc_maxlifetime", "800000");
if (!$old_sessionLifeTime) {
// Det var ikke muligt at ændre session.gc_maxlifetime
echo "Session levetid kunne ikke ændres\n"; ,
ini_set("session.gc_maxlifetime", $old_sessionLifeTime);
}
session_start();
?
Tak tak :)
Mvh. Lasse Jensen
| |
Michael Rasmussen (15-06-2006)
| Kommentar Fra : Michael Rasmussen |
Dato : 15-06-06 16:47 |
|
On Thu, 15 Jun 2006 17:21:08 +0200, Lasse Jensen wrote:
>
> Hvor vil det sige helt præcist?
>
Ja, og herefter som sidste linje i dit script.
> Skal det stå sådan her;
>
> $old_sessionLifeTime = ini_set("session.gc_maxlifetime", "800000"); if
> (!$old_sessionLifeTime) {
> // Det var ikke muligt at ændre session.gc_maxlifetime echo "Session
> levetid kunne ikke ændres\n"; , ini_set("session.gc_maxlifetime",
> $old_sessionLifeTime);
> }
> session_start();
.....
en masse linjer
ini_set("session.gc_maxlifetime", $old_sessionLifeTime);
?>
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917
| |
Lasse Jensen (15-06-2006)
| Kommentar Fra : Lasse Jensen |
Dato : 15-06-06 20:50 |
|
Michael Rasmussen skrev:
>
> Inden du starter din session med session_start(), skal du skrive følgende:
> $old_sessionLifeTime = ini_set("session.gc_maxlifetime",
> "antal_sekunder_din_session_skal_leve");
> if (! $old_sessionLifeTime)
> // Det var ikke muligt at ændre session.gc_maxlifetime
> echo "Session levetid kunne ikke ændres\n";
>
> Inden din applikation lukker, bør du gøre følgende:
> ini_set("session.gc_maxlifetime", $old_sessionLifeTime);
>
Det ser desværre ikke ud til at virke ;(
Altså if sætningen går igennem og den siger ikke noget om at levetiden
ikke kunne ændres? Men efter 24 min. blive diverse sessions stadig
destroyed.
Mvh. Lasse Jensen
| |
Michael Rasmussen (15-06-2006)
| Kommentar Fra : Michael Rasmussen |
Dato : 15-06-06 21:49 |
| | |
Lasse Jensen (15-06-2006)
| Kommentar Fra : Lasse Jensen |
Dato : 15-06-06 21:58 |
|
Michael Rasmussen skrev:
> On Thu, 15 Jun 2006 21:50:15 +0200, Lasse Jensen wrote:
>
>
>>Det ser desværre ikke ud til at virke ;(
>>
>>Altså if sætningen går igennem og den siger ikke noget om at levetiden
>>ikke kunne ændres? Men efter 24 min. blive diverse sessions stadig
>>destroyed.
>
> Det skulle ellers virke. Se denne side:
> http://dk.php.net/manual/da/ini.php#ini.list
>
Ja det burde det. Hmm jeg må snakke med folkene bag serverne, måske ved
De hvorfor.
Mvh. Lasse Jensen
| |
|
|