[PHP] Uitlogprobleem - Session blijft bestaan op subdomein

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Lieve mensen,

Ik ben bezig met een profielensite waar de profielnaam de subdomeinnaam is (http://profielnaam.domeinnaam.nl/). Virtuele dynamische subdomeinen dus. Wanneer je inlogt op de site, wordt er een cookie aangemaakt welke geldig is voor alle subdomeinen, (Cookiedomein: ".domeinnaam.nl") Dit werkt allemaal zonde problemen. Wanneer ik nu naar een ander subdomein ga, wordt de cookie uitgelezen en wordt er een sessie gestart op dit subdomein, aan de hand van de gegevens in de cookie.

Nu is het echter zo dat wanneer ik uitlog op bijv. profiel1.domeinnaam.nl en vervolgens naar profiel2.domeinnaam.nl ga, ik op dat subdomein nog steeds ingelogd ben... Log ik bijvoorbeeld in als een ander persoon op profiel1.domeinnaam.nl, dan ben ik dus op het ene domein ingelogd als pietje, en het andere subdomein als henkie.

Hoe kan ik zorgen dat ik tijdens het uitloggen de sessies op de subdomeinen ook destroy?

Vooralsnog heb ik als uitlogscript:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?

    session_start();
    
    ini_set("session.cookie_domain", ".domeinnaam.nl");
    
    foreach($_SESSION as $key => $value) {
        $_SESSION[$key] = '';   
    }
    
    unset($_SESSION);
    
    session_unset();

    setcookie("Login[profielnaam]", '', time()-3600, "/",".domeinnaam.nl");
    setcookie("Login[wachtwoord]", '', time()-3600, "/",".domeinnaam.nl");
    setcookie("Login[user_id]", '', time()-3600, "/",".domeinnaam.nl");
        
    session_destroy();  
    
    header("Location: ".$_SERVER['HTTP_REFERER']);

?>

Ik heb bijvoorbeeld geprobeerd op in de cookie een waarde te zetten van bijv, uitgelogd = true, Maar dat zou nog inhouden dat ik vervolgens alle subdomeinen waar ik geweest ben nog een keer zou moeten bezoeken om na uitlezen van de cookie de session te beëindigen.

edit: Ik vraag me dus af of iemand een workaround weet te omschrijven. Kan zelf wel redelijk nadenken, als ik maar een opstapje/idee heb. Want in het uitlogscript valt niks meer uit te halen. Misschien iets met een sessienaam definiëren o.i.d.?

[ Voor 5% gewijzigd door Verwijderd op 01-10-2009 11:08 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 10:22

MueR

Admin Tweakers Discord

is niet lief

Session_destroy() zou je sessie moeten vernietigen, maar omdat je zelf loopt te klieren met cookie domains na het openen van de session, weet ik het zo niet.

Verder: Waarom sla je al die meuk op in cookies? Waarom eerst elke session var leegmaken, vervolgens unset en daarna session_destroy()? Dat is driedubbel.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Inderdaad driedubbel en onnodig, maar ik wilde zeker weten dat ik alles had geprobeerd. Ik heb het zonder de ini_set>cookiedomain geprobeerd. Echt alles wat in MIJN macht ligt. Vandaar de post hier. Ik denk zelf aan het volgende:

De sessie een naam geven als bijv een tijdcode icm hash oid, deze in de sessions zetten op de subdomeinen, en in de cookie zetten. Bij uitloggen deze hash uit de cookie halen/laten verlopen. Wanneer je dan op een ander subdomein komt, en de hash is leeg, daar de sessions destroyen. Log je opnieuw in, heb je een nieuwe hash, en dus de bestaande sessions welke een andere hash hebben bij openen destroyen of overschrijven.

Is allemaal theorie, maar zou dit een optie kunnen zijn?

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ik snap sowieso niet helemaal wat het doel is. Als je bij bijv. hyves inlogt dan ben je ingelogd als user "x" en als jij naar het profiel van user "y" gaat ben jij nog steeds ingelogd als user "x". Los van je probleem vat ik niet helemaal wat daar handig aan is :?

Verder zou ik lekker werken met een eigen sessiesysteem zoals je zelf al min of meer beschrijft, zo heb je altijd alles zelf in de hand. Je hoeft dan niet eens de sessies te verwijderen maar gewoon de verwijzing naar welke user het is te updaten.

Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
  1. Zet error reporinting eens aan (indien je dat nog niet hebt)
  2. ini_set('session.cookie_domain', 'domeinnaam.nl'); (zonder . ervoor dus)
  3. Controleer eens op welk domein de cookies daadwerkelijk gezet worden
  4. NOOIT wachtwoorden in cookies gaan proppen....

[ Voor 9% gewijzigd door gertjuhh op 01-10-2009 12:03 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

[quote]gertjuhh schreef op donderdag 01 oktober 2009 @ 12:02:
• ini_set('session.cookie_domain', 'domeinnaam.nl'); (zonder . ervoor dus)
Euh, nee, dat maakt de cookie alleen geldig voor domeinnaam.nl, en niet voor alle subdomeinen van domeinnaam.nl. Volgens PHP.net iig.

[ Voor 55% gewijzigd door .oisyn op 01-10-2009 12:17 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wachtwoord was dd al uit m'n cookie, stond aleen nog in m'n logoff script. Echter wat Cartman denkt dat ik bedoel is dat ik op verschillende subdomeinen onder een andere naam ingelogd wil zijn, klopt niet. Ik probeer dus het zelfde te bereiken als bijv een hyves. Maar probleem is echter dat wanneer ik uitlog, ik op de andere subdomeinen nog steeds ingelogd ben als die user. Wanneer ik dus inlog als een ander, en even later terug kom op een vorig subdomein, ben ik daar dus nog ingelogd als de vorige user.

Error reporting heb ik altijd aanstaan tijdens ontwikkelen.
Cookies zomnder de beginnende "dot", zijn alleen uit te lezen op het subdomein waar ik mijzelf heb ingelogd, met de "dot" ervoor maak ik ze dus toegankelijk voor alle subdomeinen van het domein "domeinnaam.nl"

Ben nu mijn eigen workaround/idee aan het uitwerken en het lijkt erop dat ik daarmee ga slagen, gezien de resultaten op google, ik hou jullie op de hoogte. Mochten er nog enige suggesties of feedback zijn, hor ik dat natuurlijk maar al te graag!

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Als je FF gebruikt, zou ik de Web Developer toolbar eens installeren en dan de cookies bekijken hoe ze uiteindelijk gezet worden.

Acties:
  • 0 Henk 'm!

  • JordyOnrust
  • Registratie: November 2007
  • Laatst online: 10-07 13:02

JordyOnrust

Leef om te leven.

Waarom zou je een wachtwoord in een cookie zetten :S ?

Antwoord inmiddels hierboven al gegeven.

[ Voor 32% gewijzigd door JordyOnrust op 01-10-2009 12:25 ]

Als je sterft voordat je sterft, sterf je niet wanneer je sterft. Rom 6:5


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Dan moet je dus toepassen wat ik schetste: een eigen sessionhandler maken. In het kort:

- maak een tabel met sessies en daarin een veld met random code en een verwijzing naar de usertable
- als iemand is ingelogd maak je een nieuwe sessie met (unieke!) code en die sla je op in een cookie die op t hele domein bereikbaar is (.domeinnaam.nl)
- tijdens het laden van de pagina check je of er een cookie is met de code, probeer die code te matchen en je weet of iemand ingelogd is, en zoja..als wie.
- als iemand uitlogt verwijder je de code uit de database en ben je klaar
NOOIT wachtwoorden in cookies gaan proppen....
Dat wil ik wel even benadrukken :)

Acties:
  • 0 Henk 'm!

  • gertjuhh
  • Registratie: April 2004
  • Laatst online: 26-04 09:14
.oisyn schreef op donderdag 01 oktober 2009 @ 12:10:
[...]

Euh, nee, dat maakt de cookie alleen geldig voor domeinnaam.nl, en niet voor alle subdomeinen van domeinnaam.nl. Volgens PHP.net iig.
My bad... :X
Al werkt het zonder 'dot' ook voor alle subdomeinen bij een implementatie die ik heb gedaan.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Cartman! schreef op donderdag 01 oktober 2009 @ 12:28:
Dan moet je dus toepassen wat ik schetste: een eigen sessionhandler maken. In het kort:

- maak een tabel met sessies en daarin een veld met random code en een verwijzing naar de usertable
- als iemand is ingelogd maak je een nieuwe sessie met (unieke!) code en die sla je op in een cookie die op t hele domein bereikbaar is (.domeinnaam.nl)
- tijdens het laden van de pagina check je of er een cookie is met de code, probeer die code te matchen en je weet of iemand ingelogd is, en zoja..als wie.
- als iemand uitlogt verwijder je de code uit de database en ben je klaar


[...]

Dat wil ik wel even benadrukken :)
Ik heb aan de hand van deze punten en een beetje eigen inbreng een login/logoff script geschreven waardoor ik nu een werkend authenticatiesysteem heb over mijn subdomeinen. Ik wil iedereen bedanken voor de snelle response, voor mij was het al een tijdje een bottleneck, met de gedachte het op een later tijdstip uit te zoeken. Nu ben ik echter op het einde aan het lopen, alsmaar vooruit schuiven, en moest het er maar eens van komen. Deze gaat mee in de pocket naar m'n volgende projecten!

Bedankt allemaal, en Cartman in het bijzonder! _/-\o_
Pagina: 1