session probleem tussen 2 dezelfde scripts

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

John goes

john goes

25/08/2011 16:49:35
Quote Anchor link
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.
Gewijzigd op 25/08/2011 17:07:42 door John goes
 
PHP hulp

PHP hulp

26/12/2024 16:46:02
 
TJVB tvb

TJVB tvb

25/08/2011 17:14:34
Quote Anchor link
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.
Gewijzigd op 25/08/2011 17:18:45 door TJVB tvb
 
John goes

john goes

25/08/2011 17:28:07
Quote Anchor link
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:

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?
 
Jacco Brandt

Jacco Brandt

25/08/2011 17:54:38
Quote Anchor link
Dat zou moeten werken, en om het helemaal simpel toe te passen, zou je dit kunnen proberen:
index.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
?>
Gewijzigd op 25/08/2011 19:09:05 door Jacco Brandt
 
TJVB tvb

TJVB tvb

25/08/2011 18:19:49
Quote Anchor link
Jacco, haal die ob_start() eens weg!

@John, ja dat is het idee. Je kunt ook zelf een session handler schrijven die dat automatisch doet, maar dat zal meer werk zijn.
 
Jacco Brandt

Jacco Brandt

25/08/2011 18:41:34
Quote Anchor link
Wacht, mijn fout. Dat waren cookies (A).
 
John goes

john goes

25/08/2011 19:00:10
Quote Anchor link
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

Quote:
session_start();
$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
 
Jacco Brandt

Jacco Brandt

25/08/2011 19:09:40
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.