Door
john goes
op 25-08-2011 16:49
gewijzigd op 25-08-2011 17:07
1.281 views
Ik heb een personeels portal script gemaakt.
Het is de bedoeling dat het script in aparte subdirectories komen te draaien. Per bedrijf.
Hier zit een CMS achter voor bepaalde instellingen die van belang zijn voor de werknemers. Het probleem is het volgende:
Ik heb 2 test portalen gemaakt. Als ik nu inlog in het cms in de ene, ben ik ook automatisch ingelogd bij de ander. Het is mij opgevallen dat de sessie id's in een browser bij de tabbladen hetzelfde zijn. Dus als ik een sessie var vul met een admin id (b.v. $_SESSION[id_admin]=1) dit ook gebeurd in het andere venster van dezelfde browser.
Dit zou betekenen dat de admin van portaal 1 zo kan inloggen in portaal 2. Hoe kan ik per tabblad van een browser een uniek sessie nummer aanmaken? Ik heb ook geprobeerd om een session_regenerate_id te doen als er nog geen $_SESSION[id_admin] is. Maar dan neemt het andere tabblad de sessie ook over.
Ik heb het ook geprobeerd met hetzelfde script op een ander domein en dan speelt dit probleem niet. Dus wel op hetzelfde domein maar met een andere subdirectory wel.
Waarschijnlijk heb ik iets over het hoofd gezien of denk ik te moeilijk voor een makkelijke oplossing. Alvast bedankt.
Je sessie wordt standaard gedeeld tussen alle pagina's binnen een domein.
Je kunt binnen de sessie het bij gaan houden per subdirectory (dus $_SESSION[SUBDIR]['key'] = 'info'; waarbij je in SUBDIR de naam van de subdir zet)
Ik bedenk me net:
Je kunt ook per met session_name de cookie naam aanpassen zodat je in verschillende domeinen kunt gaan zitten.
De server weet namelijk niks van tabbladen o.i.d. (zou er eens bij moeten komen dat ik voor een website maar 1 tabblad open mocht hebben)
Maar een hele andere vraag is wat jij in je sessie opslaat. Het lijkt me alleen de gebruiker en die zou geen rechten mogen hebben in het cms van een ander bedrijf.
In de sessie bewaar ik inlog gegevens. Een ID nummer van aangemaakte gebruikers van het CMS. Er word dan getoetst of er een waarde is. Er is slechts 1 gebruikers nivo.
Het probleem is gewoon dat de inhoud $_SESSION[admin_id] kan worden overgenomen door een ander script binnen het domein. Dat andere script is doet het zelfde, maar werkt voor een andere 'baas'. Dus:
Okee,
Allemaal erg bedankt voor het antwoord. Ik heb een paar regels script gemaakt die de submap bekijkt en hier een constante van maakt en deze dan gebruikt om de te bepalen waar de sessie hoort.
index.php
session_start();
$sub=explode('/',$_SERVER['PHP_SELF']); //$sub[1] hebben we nodig
define( SUBMAP, $sub[1]);
unset($sub);
verder gebruik ik dan b.v.
$_SESSION[SUBMAP][user_id]
Het ziet ernaar uit dat het zo werkt. Soms ligt het antwoord dichterbij dan je denk!.
Als je nu kijkt naar de oplossing die ik hierboven gegeven had, dan zie je dat dat eigenlijk veel simpeler is. Je kunt dan namelijk de rest van het script gewoon blijven gebruiken.