[php]session veranderd bij nieuw venster

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Ey,

Ik dacht een werkend inlogsysteem te hebben, maar de bugs vliegen me de laatste dagen om m'n oren. Na eerst een probleem met de koekjes te hebben opgelost, ben ik nu echt gestrand met een session probleem.

Even een korte toelichting op mijn systeem.
De user logt in, op dat moment wordt er in de database een record aangemaakt met wat gegevens van de user, en, een session id, zo'n duizend keer geëncrypt en weet ik wat, boeit verder niet.

Deze session id (sid) slaan we op in een session: $_SESSION['sid'], en daarmee haal ik leuk iedere keer de gegevens op die ik moet hebben. De cookies worden gebruikt als een user voor altijd ingelogd wil zijn. Dit werkt allemaal prima, maar nu komt het!

Ik kan het probleem zelf niet nabootsen, dat is zeer storend, maar het is dus zo dat als je een new venster opend, hij dan begint te happeren met de session. Eigenlijk krijgt de session gewoon een totaal andere sid, waardoor hij de record niet meer kan vinden, en de user uitlogt en een error pagina voorschoteld.

De enige theorie die ik erover heb is dat de session niet wordt meegenomen naar het nieuwe venster, maar het nieuwe venster herkent wel de cookie en maakt daarom een nieuwe session aan, oid. In ieder geval breekt de hel los :S

Ik heb echt geen idee wat het kan zijn, en ik hoopte dat jullie me wat toelichting konden geven. (zo'n forum bouwen valt nog niet mee ;) )

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
wat heeft het opslaan van een SID in een session nu voor zin? Je hebt deze SID juist nodig om je sessie weer op te pikken. De SID geef je door m.b.v. een cookie of via de url. Wanneer je session_use.trans_sid of i.d. gebruikt dan wordt de SID automatisch aan je url geplakt.

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
stekkel schreef op 05 maart 2004 @ 17:43:
wat heeft het opslaan van een SID in een session nu voor zin? Je hebt deze SID juist nodig om je sessie weer op te pikken. De SID geef je door m.b.v. een cookie of via de url. Wanneer je session_use.trans_sid of i.d. gebruikt dan wordt de SID automatisch aan je url geplakt.
Volgens mij snap je het princiepe niet helemaal, ik creeër zelf een sid en sla die op in een session, zodat ik op de volgende pagina weer snel toegang heb tot deze sid. Ik zou er ook een user_id ofzo in kunnen gooien, maar ik heb gekozen voor een sid, met deze sid haal ik de user info uit de database.

Ik ben ondertussen al weer wat verder. ctrl-n Fungeert prima, dat is het probleem niet. Maar open je een 2e browser via een icoontje o.i.d., dan ziet hij de oude session (van de 'andere' browser) niet, waardoor hij een nieuwe session aanmaakt. Dat valt bij de andere browser natuurlijk niet echt goed, omdat die nog de oude session heeft, en dus een verkeerde sid, waardoor hij geen gegevens kan vinden, en de user wegschopt.

Nu is dit op 2 manieren op te lossen volgens mij.....

1. Ik stap van sessions af, en ga cookies gebruiken om de sid in op te slaan
nadelen: minder veilig, halve inlog-script herschrijven

2. Ik kijk of het ip van de oude browser nog wel overéén komt met de nieuwe session, en of er minder dan x aantal seconden tussen zit, als dat zo is, update ik de session van de oude browser met de nieuwe gegevens.
nadelen: omslachtig :?

Zijn er nog meer manieren volgens jullie? Andere suggesties, oplossingen? En als je niets beters weet, welke zou jij dan kiezen?

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Ik zou voor de cookie gaan, dat is gewoon een van de standaard manieren, veel betere zullen er waarschijnlijk dus wel niet zijn in dit geval.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Als je in je browser een nieuw venster opent dan blijft je sessie behouden. Als je echter een nieuwe SESSIE van de browser start dan krijg je een... nieuwe sessie! :)

Er zit dus nogal een verschil tussen een ctrl-N en een IE-link dubbelklikken op je bureaublad ;)

Aangezien de ene altijd ctrl-N gebruikt oid en een ander gewoon altijd een icoon of knop op de quicklaunch om een nieuw 'venster' te openen kun je verschillende resultaten krijgen. Even uitleggen hoe programma's werken in Windows doet wonderen. Scheelt ook een berg geheugen (1 IE met 10 vensters is heel wat minder dan 10x IE).

[ Voor 41% gewijzigd door Bosmonster op 05-03-2004 18:43 ]


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Roa schreef op 05 maart 2004 @ 18:06:
[...]


Volgens mij snap je het princiepe niet helemaal, ik creeër zelf een sid en sla die op in een session, zodat ik op de volgende pagina weer snel toegang heb tot deze sid. Ik zou er ook een user_id ofzo in kunnen gooien, maar ik heb gekozen voor een sid, met deze sid haal ik de user info uit de database.
Ah okey, ik dacht dat je refereerde naar de global SID dat door PHP gebruikt wordt om the Session ID aan de geven. Ik zou een andere naam kiezen voor jouw SID :)

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Bosmonster schreef op 05 maart 2004 @ 18:40:
Als je in je browser een nieuw venster opent dan blijft je sessie behouden. Als je echter een nieuwe SESSIE van de browser start dan krijg je een... nieuwe sessie! :)

Er zit dus nogal een verschil tussen een ctrl-N en een IE-link dubbelklikken op je bureaublad ;)

Aangezien de ene altijd ctrl-N gebruikt oid en een ander gewoon altijd een icoon of knop op de quicklaunch om een nieuw 'venster' te openen kun je verschillende resultaten krijgen. Even uitleggen hoe programma's werken in Windows doet wonderen. Scheelt ook een berg geheugen (1 IE met 10 vensters is heel wat minder dan 10x IE).
Dat heb ik nu dus ook door, maar het wordt een site met (hopenlijk O-) ) veel bezoekers en users, en ik heb geen zin om daar tijd aan pc-opvoeding aan te gaan besteden, kortom, ik moet om de onwetenheid van de 'domme' bezoeker heen progameren ;)
djluc schreef op 05 maart 2004 @ 18:32:
Ik zou voor de cookie gaan, dat is gewoon een van de standaard manieren, veel betere zullen er waarschijnlijk dus wel niet zijn in dit geval.
Nee, inderdaad, daar zit ik nu ook aan te denken. Toch flauw als je 1 week besteed aan het ombouwen van je cookie-based inlog systeem naar sessions, en vervolgens weer moet terugstappen op cookies. Ik had het ook gedaan ivm mensen die cookies weigeren.

Maar ach, kheb nog steeds veel geleerd, mijn vorige inlogsysteem met koekjes sloeg gewoon de username en het password op in 2 koekjes, niet eens gecodeerd :P Dat waren nog eens tijden ;)

Kzit nog steeds te twijfelen.....makkelijkere oplossing is toch de cookies...ook vanwege de eeuwige login.... Pfff..lastig...

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Maak dan gewoon een combinatie van sessies en koekjes, dan heb je een systeem voor mensen met en zonder koekjes. Een goede tutorial overigens: http://www.phpfreakz.nl/artikelen.php?aid=98

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
djluc schreef op 05 maart 2004 @ 20:32:
Maak dan gewoon een combinatie van sessies en koekjes, dan heb je een systeem voor mensen met en zonder koekjes. Een goede tutorial overigens: http://www.phpfreakz.nl/artikelen.php?aid=98
Uhm......ja...dat lijkt me dan nogal dubbelop...Ik snap je princiepe wel, maar het is nogal omslachtig lijkt me.

Ojah, die tutorial heb ik niet echt nodig in dit geval, toch bedankt ;)

[ Voor 63% gewijzigd door Roa op 05-03-2004 20:50 ]

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je hebt dan voor de mensen die cookies aan hebben staan alle voordelen van cookies, en voor de mensen die het uit hebben staan toch een goed werkend systeem. Lijkt mij geen gek idee eerlijk gezegd.

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
djluc schreef op 05 maart 2004 @ 21:45:
Je hebt dan voor de mensen die cookies aan hebben staan alle voordelen van cookies, en voor de mensen die het uit hebben staan toch een goed werkend systeem. Lijkt mij geen gek idee eerlijk gezegd.
Het probleem is dus dat het systeem niet goed werkt, anders hoef ik niets meer te doen. Want waarom zou ik alles naar cookies doen als de sessions goed zouden werken? Ik kan me niet voorstellen dat een gebruiker liever cookies heeft.

Dus...daar moet ik maar overna denken..maar ik begrijp iig dat er geen andere oplossingen zijn dan de 2 die ik gaf.. En daarvan lijkt een cookie ipv session met de sid toch de beste..... Anyone misschien nog?

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Kun je niet gewoon de session lifetime anders instellen? Bij 0 is deze geldig in de browsersessie maar dit kan je ook langer instellen.

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
djluc schreef op 05 maart 2004 @ 22:37:
Kun je niet gewoon de session lifetime anders instellen? Bij 0 is deze geldig in de browsersessie maar dit kan je ook langer instellen.
Dat is het probleem niet, de sessions werken naar behoren. Maar als iemand is ingelogd, en met een opnieuw opgestarte browser (dus ipv nieuw venster, opnieuw de browser openen) naar de site gaat, wordt de session niet herkent, logisch, die session zit in de andere browser.

Opzich geen probleem, tenzij de gebruiker heeft ingesteld altijd ingelogd te willen zijn: in dat geval is er namelijk een cookie aanwezig op de pc van de gebruiker, en omdat die nieuwe browser die cookie herkent, gaat de nieuwe browser een nieuwe session aanmaken, waardoor de gegevens in de database veranderen en de oude session (de andere, 'oude', browser dus) verkeerde data bevat, en daardoor een error produceerd.

Hoe dit op te lossen is, ik weet twee manieren:
1. Ik stap van sessions af, en ga cookies gebruiken om de sid in op te slaan
nadelen: minder veilig, halve inlog-script herschrijven

2. Ik kijk of het ip van de oude browser nog wel overéén komt met de nieuwe session, en of er minder dan x aantal seconden tussen zit, als dat zo is, update ik de session van de oude browser met de nieuwe gegevens.
nadelen: omslachtig
maar geen bevalt me echt, dus wil ik graag jullie mening weten over deze manieren

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan misschien ook even kijken naar de volgende opties in php.ini:

session.use_cookies
session.use_only_cookies

En daaruit volgt:

session.cookie_*

Zie ook:

http://nl2.php.net/session

[ Voor 12% gewijzigd door Verwijderd op 06-03-2004 20:51 . Reden: BTW ]


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Goed, sommige mensen schijnen het probleem niet helemaal te vatten, maar ik heb het als volgd opgelost:

Als de info in de session niet klopt, gaat hij kijken of het IP adres veranderd is, als dat niet zo is, kijkt hij of de andere session niet ouder is dan 10 minuten, als hij dus jonger is dan 10 minuten, wordt de verkeerde session geupdate met de nieuwe session informatie.

Probleem opgelost dus :D

Evetueel ga ik later nog een functie maken die bij het aanmaken van de nieuwe session (dus in de nieuwe browser) alvast kijkt of er niet nog een andere session in een andere browser loopt, en als dat zo is, gewoon die session overneemt.

In ieder geval bedankt voor sommige inzichten.

Research is what I'm doing when I don't know what I'm doing.

Pagina: 1