/ 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 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

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

--
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 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

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

Månedens bedste
Årets bedste
Sidste års bedste