[PHP] Sessie verlopen of nooit aangemaakt?

Pagina: 1
Acties:

Onderwerpen


  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
Ik heb een pagina in een site die altijd in het menu van deze site staat. Als je ingelogd bent krijg je de inhoud van deze pagina te zien, en als je niet ingelogd bent krijg je een login/join scherm.

Maar nu wil de klant graag dat er een melding op die loginpagina komt als je te lang niets meer gedaan hebt (als je sessie verlopen is dus).

Een simpele check of een sessievariabele wel of niet bestaat kan natuurlijk niet, want er moet onderscheid gemaakt worden tussen wel ingelogd geweest, of nooit ingelogd geweest.

Iemand een suggestie?

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Zonder sessies/cookies weet je niets meer dan de huidige request.

{signature}


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 14:51

Sebazzz

3dp

Je kan instelling na hoeveel tijd de sessie verloopt.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Verwijderd

Je boventitel verraad het al een beetje eigenlijk :)
Weet niet of dit de snelste oplossing is maar, als je een degelijk login systeem hebt dan registreer je vast wel dingen in de DB als een gebruiker inlogt.

Zet daar de huidige tijd/datum etc. bij en controleer dan doormiddel van een bepaalde tijd of dit al "te lang" geleden is. Weet niet of het zo helemaal klopt maar het komt iig aardig in de buurt geloof ik. :z

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

En hoe weet je dat de gebruiker ook de juiste is ? Juistem: Met sessies/cookies dus.

don't be afraid of machines, be afraid of the people who build and train them.


  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
@Voutloos: ik heb al geprobeerd met cookies te werken, maar om een of ander reden werken die niet... :? Dat ga ik nu proberen uit te vogelen en dan hoop ik daar iets "waterdichts" mee te kunnen maken. Mijn orginele id: tijdens login een cookie én een sessie zetten. Als met op de loginpagina komt en er is geen cookie en geen sessie, dan krijg je de join tekst, is er geen sessie maar wel een cookie, dan krijg je de session expired tekst. Maar goed. Cookies werken dus niet om wat voor reden dan ook.

@sebazzz: ja, dat klopt, maar wat heb ik daar aan?

@daride: het is juist een heel simpel loginsysteem (hele simpele site, maar goed, klant is koning), dus kan niks bijhouden in een DB.

[ Voor 27% gewijzigd door Barracuda_82 op 04-09-2008 16:28 ]


  • Sh4wn
  • Registratie: December 2006
  • Laatst online: 12-11-2017

Sh4wn

Bio-informatica

Als je gebruikt maakt van sessies, met PHP's ingebouwde sessie systeem, dan verlopen die na het sluiten van je browser.

Je kan natuurlijk zelf ook een sessie systeem in elkaar zetten, die meer opties heeft. Je kan dan bijv. sessie duur opslaan, welke pagina de bezoeker request, wanneer de sessie is gestart etc. De mogelijkheden zijn bijna eindeloos.

Wil je niet zo'n eigen systeem bouwen, dan moet je bij elke request de datum/tijd opslaan in een sessie. Dit is dus het tijdstip van de laatste activiteit. Op de login pagina (of eigenlijk op elke pagina), kan je checken hoelang het is geleden sinds laatste activiteit, en aan de hand daarvan kan je een melding tonen.

Met het standaard sessie systeem van PHP kan je niet checken, wanneer er geen sessie bestaat (bezoeker is dus niet ingelogd), of die bezoeker er net wel was, maar dat hij zijn browser heeft afgesloten, of dat hij hier net voor het eerst komt.

[ Voor 15% gewijzigd door Sh4wn op 04-09-2008 16:30 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Barracuda_82 schreef op donderdag 04 september 2008 @ 16:27:
@Voutloos: ik heb al geprobeerd met cookies te werken, maar om een of ander reden werken die niet... :?
Dan lees je de docs van setCookie() nog een keertje.

Anyway, aangezien cookies niet eeuwig blijven bestaan of sommige eindgebruikers soms wel een anders browser of locatie gebruiken, of omdat dezelfde browser soms met meerdere personen gedeeld wordt, is de wens van de klant grote onzin en moet je gewoon altijd een login- EN een regstratieoptie tonen aan de niet ingelogde gebruiker. Weg probleem. :Y)

{signature}


  • Barracuda_82
  • Registratie: September 2001
  • Laatst online: 19-12-2024

Barracuda_82

mkTime(), not war!

Topicstarter
Die docs ken ik onderhand uit mijn hoofd. Geen idee wat er mis gaat. Zal wel weer iets lulligs zijn..,

Maar goed, een cookie blijft inderdaad ook niet eeuwig bestaan, en sommige mensen hebben cookies gedisabled, dus dan zou het daar al helemaal niet werken.

De login en registratiefunctie worden sowieso altijd al weergegeven, maar het gaat in deze alleen om deze zin: "Your connection time is expired, please log in again. " die wel of niet weergegeven moet worden. Lekker belangrijk, maar de klant wil het per sé....

Maar goed, als ik de cookies aan de praat krijg. Stel dat iemand dan inlogd en daarna zijn broswer sluit... dan is de cookie er nog wel maar de sessie weg. Als iemand anders dan achter de computer gaat zitten die nog nooit ingelogd is geweest krijgt ie alsnog die melding... Dus het kan op die manier sowieso niet werken.

Enige optie is dus een eigen sessiesysteem bouwen. Dat houdt in dat het complete huidige usersysteem en de rest van de site op de schop moeten om deze zin weer te geven... fijn is dat.

Ik denk dat ik toch eens met de projectleider ga praten...

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

SchizoDuckie

Kwaak

Waarom zo moeilijk? Je kunt toch gewoon een cookie setten?

Als je inlog systeem werkt, dan werken de cookies (want de php session handler werkt ook gewoon met cookies)

Kortom: check eerst even op veel voorkomende problemen voordat je vage oplossingen gaat checken :P

[ Voor 68% gewijzigd door SchizoDuckie op 04-09-2008 17:11 ]

Stop uploading passwords to Github!


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
kun je het niet als volgt oplossen:

je sessieID stuur je bij ieder request in een schaduwvariabele mee... bijv: RememberSessionID. Als de klant dan te lang wacht met z'n actie en vervolgens op een knopje/link drukt, wordt hij via het logincontrole systeem weer naar de loginpagina gestuurd. Maar in deze controle heb je de RememberSessionID meegekregen, dus je weet dat er een sessie geweest is. Voila, klaar.
eventueel kun je de RememberSessionID nog opslaan in de database om te checken of er niet zomaar een RememberSessionID verzonnen is, maar dat lijkt me niet echt boeiend.

of mis ik echt compleet het probleem?

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Pfff, gewoon "sessie verlopen" weergeven als iemand met oude sessie info in z'n request aan komt kakken en voor de rest KISS.

{signature}


  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Wanneer men geen sessie heeft zul je het session cookie niet ontvangen.
Wanneer men wel een sessie had maar de sessie verlopen is zul je wel het cookie ontvangen, maar zal het bijbehorende session-bestand ontbreken.

Kijk dus eens naar session_name() om de naam van het sessioncookie te bepalen, en session_save_path() om te bepalen waar de sessie gegevens staan, en filemtime() om te zien wanneer dat bestand voor het laatst is benaderd, als hij er uberhaupt nog staat.
Pagina: 1