[php] krijg het niet voor elkaar de sessie actief te houden

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
De situatie:

Ik heb in een klein iframpje onder aan m'n website een overzichtje gemaakt van de users die zijn ingelogd, met een linkje erbij zodat ze berichten aan elkaar kunnen sturen. Die pagina in dat iframe refreshed elke minuut en doet dan het volgende:
- zet in mysql de timestamp van de user op de huidige tijd (moet hier bij vermelden dat als een user is ingelogd de waarde van het veld online op yes is gezet (voor het overzicht))
- controleert of er een row in de database is waarbij online op yes staat en de timestamp ouder is dan anderhalve minuut, en zo ja: dan wordt online op no gezet (de user wordt dan niet meer in het overzicht weergegeven)
- controleert of er nieuwe berichten zijn (zo ja, dan worden die in een popupje getoond)

omdat de pagina iedere minuut refreshed, zal de timestamp in de database ook ververst worden en daarom weet ik dus dat als die timestamp ouder is dan 1,5 minuut, dat die user ofwel uitgelogd is, of z'n browser heeft gesloten.

Het probleem
Ondanks dat die pagina iedere minuut refreshed (gedaan met een meta-tag) expired de sessie na verloop van tijd. Ik heb proberen te achterhalen hoe dat kwam, maar snap het niet helemaal. wat ik tot nu toe geprobeerd heb (naast php.net doorlezen)
- de timestamp van de sessie_file uitgelezen (je weet wel, /tmp/sess_987ukjdlkj345o3lk34j53l). Het was me al eens eerder opgevallen dat die na iedere klik binnen de site de huidge timestamp krijgt en toen ik die op m'n scherm printe bleek die niet te veranderen met iedere refresh. Wat ik toen gedaan heb is dit stukje code in m'n file gezet:
PHP:
1
$_SESSION['login']['keep_alive'] = $_SESSION['login']['keep_alive'] == 0 ? 1 : 0;
Dat werkte tot dusver, dat ik de timestamp van die sessie file toen wel zag veranderen. Maar nog steeds expirede m'n sessie na verloop van tijd als ik nergens op klik
Het laatste wat ik nu geprobeerd had is om die meta-tag naar een andere file te laten verwijzen, waar ik als enige code de bovenstaande regel in heb staan en weer een redirect - header("Location online.php") terug naar m'n online script. Maar dat helpt ook niets.

Kan iemand me uitleggen waarom die sessie toch expired? zoals ik al zei: ik kan het op php.net nergens vinden. Heb nog aan cookies zitten denken, maar dat moet ook niet uitmaken, want die wordt al zo gezet dat ie pas afloopt als de browser gesloten wordt (heb ik ook nog eens gedubbelchecked)

oh, het is trouwens zo dat online.php zelf als het ware niet verloopt
wat ik bedoel... ik heb in die code opgenomen dat er alleen op berichten gecontroleerd moet worden als er een user_id (opgeslagen in de sessie) bekend is. als ik dus bijvoorbeeld ben ingelogd en 2 uur lang niets doe, en ik krijg opeens een berichtje, dan log ik pas uit op het moment dat dat popupje met het bericht opensprint. Dat popupje heeft dan als het ware in de gaten dat de sessie eigenlijk verlopen is en ipv het bericht krijg ik dan m'n melding dat ik de pagina niet mag bekijken omdat ik niet ben ingelogd. En vervolgens gebeurd hetzelfde met online.php (die heeft dan pas 'in de gaten' dat de sessie expired is)

hoop dat het duidelijk is...

Acties:
  • 0 Henk 'm!

  • PanMan
  • Registratie: November 1999
  • Laatst online: 16:11

PanMan

Spun!

ik denk dat je browser toch de file cacht, en je updates daarom dus niet aankomen op je server.
Wat ik zou doen (en zoiets heb ik ook wel's gedaan), is gewoon een loze var achter je meta refresh zetten. Dus iets als url=$url?time=<? echo time(); ?>
Je hoeft niets met die var time te doen verder in je script, maar je browser denkt dat er elke keer andere info wordt meegegeven, en die vraagt hem dus wel elke keer op.
success!

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
helaas, dat werkt niet... ;(
maar, ik verwachte ook al niet dat het zou werken, want op het moment dat er een andere user online komt die mij een berichtje stuurt (na bijvoorbeeld 2 uur), dan zie ik 'm wel online komen zonder dat ik uitlog - dus dan veranderd de online pagina al, en kan ie het niet uit z'n cache hebben getrokken - maar het gaat pas fout op het moment dat diegene mij een berichtje stuurt en er dus een nieuwe windowtje (en dus nieuw bestand) wordt geopend.

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
klein kickje

wat ik ook nog heb geprobeerd is om in de headers op te nemen dat ie 'm niet uit z'n cache mag trekken. Door de timestamp van die sessiefile te echoen zie ik dat ie dat ook niet doet. maar toch hou ik hetzelfde probleem.

iemand?

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

marty schreef op 03 April 2003 @ 23:45:
De situatie:
PHP:
1
$_SESSION['login']['keep_alive'] = $_SESSION['login']['keep_alive'] == 0 ? 1 : 0;
Mag je zo'n 'short if' ook zonder haakjes eromheen uitvoeren dan??

ik dacht altijd dat dat zo moest

PHP:
1
$_SESSION['login']['keep_alive'] = ($_SESSION['login']['keep_alive'] == 0) ? 1 : 0;

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ja dat mag
tenminste, of het semantisch correct is weet ik niet, het werkt in iedergeval wel. En in die zin zal het ook niet helpen om anders op te schrijven, met betrekking tot het probleem wat ik nog steeds heb.
Pagina: 1