session probleem tussen 2 dezelfde scripts
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.
Gewijzigd op 25/08/2011 17:07:42 door John goes
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.
Gewijzigd op 25/08/2011 17:18:45 door TJVB tvb
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:
www.domein.nl/bedrijf1/index.php
en
www.domein.nl/bedrijf2/index.php
e.t.c.
Ik zou er dus voor kunnen kiezen om de sessies in subs te zetten:
$_SESSION[bedrijf1][admin_id]
en
$_SESSION[bedrijf2][admin_id]
e.t.c.
Zou dit de truuk moeten zijn?
index.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
session_start()
$temp = $_SESSION;
$_SESSION = $temp['bedrijf1'];
// al je dingen
$temp['bedrijf1'] = $_SESSION;
$_SESSION = $temp;
?>
session_start()
$temp = $_SESSION;
$_SESSION = $temp['bedrijf1'];
// al je dingen
$temp['bedrijf1'] = $_SESSION;
$_SESSION = $temp;
?>
Gewijzigd op 25/08/2011 19:09:05 door Jacco Brandt
@John, ja dat is het idee. Je kunt ook zelf een session handler schrijven die dat automatisch doet, maar dat zal meer werk zijn.
Wacht, mijn fout. Dat waren cookies (A).
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
Quote:
session_start();
$sub=explode('/',$_SERVER['PHP_SELF']); //$sub[1] hebben we nodig
define( SUBMAP, $sub[1]);
unset($sub);
$sub=explode('/',$_SERVER['PHP_SELF']); //$sub[1] hebben we nodig
define( SUBMAP, $sub[1]);
unset($sub);
verder gebruik ik dan b.v.
Quote:
$_SESSION[SUBMAP][user_id]
Het ziet ernaar uit dat het zo werkt. Soms ligt het antwoord dichterbij dan je denk!.
Gewijzigd op 25/08/2011 19:01:25 door john goes
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.