Toon posts:

[PHP] tijdsduur van een sessie zetten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil graag de tijdsduur van m'n sessie op 30 minuten zetten, maar dit wil me maar niet lukken.
Ik heb het eerst zo geprobeerd:
code:
1
2
3
4
5
6
<?php 
session_set_cookie_params(60); 
session_name("PMO"); 
session_start(); 
//rest van de code 
?>

(probeerde het eerst met een minuut, ander moest ik zo lang wachten :)

Maar dat gaat dus niet.

Toen heb ik het geprobeerd met een cookie, die dan de sessie als het ware moest 'overriden':
code:
1
2
3
4
5
<?php 
session_name("PMO"); 
session_start(); 
setcookie ("PMO", session_id(), time()+60); 
?>

Ik pas het toe op een site waar ik een inlog systeem voor heb gemaakt, dat met sessies werkt.
Als ik die cookie zet dan zie ik 'm wel in m'n browser staan, maar ben na 5 minuten nog steeds ingelogt (als ik nergens op klik). En da's dus niet de bedoeling - met het bovenstaande wil ik dus maar 1 minuut ingelogt blijven.

Kan iemand me vertellen wat ik fout doe, of hoe het anders kan

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Als je nergens op klikt zal er natuurlijk ook weinig veranderen in je pagina. Onthoud goed dat http redelijk statisch en 1-richtingsverkeer is. Het is niet zo dat je simpel kunt instellen dat precies op het moment dat je sessie verlopen is je ook werkelijk uitgelogd bent.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Op zaterdag 01 juni 2002 16:29 schreef Janoz het volgende:
Als je nergens op klikt zal er natuurlijk ook weinig veranderen in je pagina.
...dat is juist de bedoeling!
Kijk, ik zet een cookie die na 1 minuut z'n geldigheid verliest en dat moet er voor zorgen dat m'n sessie niet meer geldig is (ik geef 'm namelijk dezelfde naam als het cookie die door de sessie gezet wordt)
Als ik ergens op zou klikken dan zou ik weer opnieuw die cookie zetten en kan ik weer tot een minuut na die klik ingelogt blijven. Dat is het hele idee juist

Verwijderd

Werkt '$timeout' niet?

[duh modus]
Nee natuurlijk werkt timeout niet, $timeout werkt per pagina, helaas..
[/duh modus]

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

voila:
PHP:
1
<?$dagen   = "365";$seconds = $dagen * 24 * 60 * 60;session_set_cookie_params(time()+$seconds); session_start();?>

/edit, je kan dus uiteraard ook een andere tijd instellen

mijn T.net systeemspecspagina


Verwijderd

Topicstarter
Op zaterdag 01 juni 2002 16:35 schreef RRX het volgende:
voila:
PHP:
1
<?$dagen   = "365";$seconds = $dagen * 24 * 60 * 60;session_set_cookie_params(time()+$seconds); session_start();?>
Als je m'n eerste post gelezen had dan kun je zien dat ik dat al heb geprobeerd en dat werkt dus niet.
Dat werkt alleen als je de tijdsduur van je sessie wilt verlengen. Verkorten kan niet (en dat wil ik dus)

  • RRX
  • Registratie: Mei 2000
  • Laatst online: 25-08 23:43

RRX

@life-

Op zaterdag 01 juni 2002 16:37 schreef linux-newbie het volgende:

[..]

Als je m'n eerste post gelezen had dan kun je zien dat ik dat al heb geprobeerd en dat werkt dus niet.
Dat werkt alleen als je de tijdsduur van je sessie wilt verlengen. Verkorten kan niet (en dat wil ik dus)
sorry, wat je zou kunnen doen is het volgende:

in een database hou je de session_id's bij, met daarbij een 1tje of een 0, is het nummertje achter session_id() 0 dan ben je niet ingelogd, als het nummertje 1 is, ben je wel ingelogd.

mijn T.net systeemspecspagina


Verwijderd

Topicstarter
Op zaterdag 01 juni 2002 16:40 schreef RRX het volgende:

[..]

sorry, wat je zou kunnen doen is het volgende:

in een database hou je de session_id's bij, met daarbij een 1tje of een 0, is het nummertje achter session_id() 0 dan ben je niet ingelogd, als het nummertje 1 is, ben je wel ingelogd.
Dat gaat ook niet werken. Voor mij niet tenminste
Wat ik wil bereiken is dat je kunt zien wie er online is. Maar omdat ik het zo omslachtig vind om bij iedere klik op een pagina aan de database te vertellen dat iemand nog online is heb ik iets anders bedacht: namelijk dat ie naar de temporary file van de sessie kijkt - hoe oud die is. Dan hoef ik die alleen maar te checken op de 'wie is er online' pagina. Maargoed, daarvoor moet ik wel controle hebben over de tijdsduur van een sessie (die kan ik dan vergelijken met wanneer die temp file voor het laatst gewijzigd is)
Als ik jou oplossing zou gebruiken dan ben ik dus weer terug bij af

Verwijderd

Op zaterdag 01 juni 2002 16:45 schreef linux-newbie het volgende:

[..]

Dat gaat ook niet werken. Voor mij niet tenminste
Wat ik wil bereiken is dat je kunt zien wie er online is. Maar omdat ik het zo omslachtig vind om bij iedere klik op een pagina aan de database te vertellen dat iemand nog online is heb ik iets anders bedacht: namelijk dat ie naar de temporary file van de sessie kijkt - hoe oud die is. Dan hoef ik die alleen maar te checken op de 'wie is er online' pagina. Maargoed, daarvoor moet ik wel controle hebben over de tijdsduur van een sessie (die kan ik dan vergelijken met wanneer die temp file voor het laatst gewijzigd is)
Als ik jou oplossing zou gebruiken dan ben ik dus weer terug bij af
Sessie zijn 'persoonlijk' en het lijkt me niet een goed idee om te zien of 'iemand anders zijn' sessie er nog is?
Als je wilt zien wie er nog online is, dan sla je toch simpelweg de persoon zijn nick/userid (liefst het tweede) op in de dbase, samen met een timestamp? En zo kan je ook een offset berekenen (bijv. 5 minuten) tussen die timestamp en de huidige tijd, en zien of hij nog actief (online) geweest is de laatste 5 minuten.
En bij elke click refresh je die timestamp dan toch gewoon?

Verwijderd

Met de functie ini_set kun je de waarde session.gc_maxlifetime zetten, die bepaald hoe lang een sessie blijft leven sinds de laatste aanroep voor deze sessie.

Lees ook dit stukje in deze tutorial over sessies eens: http://www.zend.org/zend/tut/session.php#ending

HTH :)

Verwijderd

zet een sessie var in de sessie die aangeeft wanneer en gebruiker het laatst een pagina opvoeg.

daarna gewoon
PHP:
1
<?if($_SESSION['time'] < (time()+ 3600)){  session_destroy();}?>

Verwijderd

Topicstarter
Op zaterdag 01 juni 2002 16:58 schreef TheViP het volgende:
zet een sessie var in de sessie die aangeeft wanneer en gebruiker het laatst een pagina opvoeg.

daarna gewoon
PHP:
1
<?if($_SESSION['time'] < (time()+ 3600)){  session_destroy();}?>
Dankje!
Zo simpel....maar het werkt perfect. dat ik er zelf niet opgekomen ben :)

Verwijderd

Toch nog even terug komend op het voorafgaande:

Dat met die cookie ging natuurlijk NIET werken, omdat een sessioncookie op de server geset wordt en een normale cookie op de client, dus overschrijven heeft, natuurlijk, geen zin.

ook heb je dit nog niet goed geprobeerd:
dit deed jij: session_set_cookie_params(60);
maar dit is gewoon geen geldige tijd (nouja, hij is wel geldig, maar ligt dus 1 minuutje na die unix epoch of zoiets dus ruim 30 jaar geleden.)

Je wilde hem 1 minuut laten duren, dus dan doe je:
session_set_cookie_params(time()+60);
en dat heb ik jou nog nergens zien doen...

de oplossing van nu werkt uiteraard ook, maar ik dacht laat ik nog even wat extra info geven...

  • Grum
  • Registratie: Juni 2001
  • Niet online
Kan je eventjes uitleggen wat een server cookie is :?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op dinsdag 04 juni 2002 07:42 schreef zellufs het volgende:

...
de oplossing van nu werkt uiteraard ook, maar ik dacht laat ik nog even wat extra info geven...
Geef dan wel juiste info... Hoe had jij de werking van een servercookie verwacht?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 05-09 13:01
Op zaterdag 01 juni 2002 16:58 schreef TheViP het volgende:
zet een sessie var in de sessie die aangeeft wanneer en gebruiker het laatst een pagina opvoeg.

daarna gewoon
PHP:
1
<?if($_SESSION['time'] < (time()+ 3600)){  session_destroy();}?>
Hier heb ik ook wat aan thx!
Pagina: 1