[PHP] Sessions pagina afhankelijk?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Ik werk al jaren met session om het inloggen van mensen bij te houden. Nu werkte dit altijd prima tot vandaag. Ik check met een functie of bepaalde variabelen al ge-set zijn, en aan de hand daarvan bepaal ik of een gebruiker wel of niet toegang heeft tot bepaalde delen van de website. Dit werkt overal goed, op 1 enkele pagina na. PHP Vergeet daar alle session variabelen en doet net alsof ze nooit aangemaakt zijn.

Het rare hieraan: de controle code op deze pagina is exact hetzelfde als op alle andere pagina's, en voor dat stukje code doe ik helemaal niks. Hoe kan het nu dat het op iedere pagina goed werkt behalve op die ene? :? Ik snap er he-le-maal niks meer van :X

Het wordt overigens nog leuker als je weet dat het probleem zich alleen online voordoet. Op m'n eigen server hier, zelfde PHP install, werkt het wel goed!?

[ Voor 11% gewijzigd door jsiegmund op 11-04-2005 11:50 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat het toch eerst het handigst is om de session-codes en controle codes te laten zien, zo moeten we ook alleen maar in het wildeweg gokken wat er aan de hand is.....

Acties:
  • 0 Henk 'm!

  • Mysteryman
  • Registratie: Februari 2001
  • Laatst online: 21-09 11:44

Mysteryman

kan jij wat ik kan...

wat ik nog wel eens vergeet voordat ik sessie variabelen uitlees is om session_start() aan het begin van mijn document te zetten...

[ Voor 21% gewijzigd door Mysteryman op 11-04-2005 11:52 ]

Everybody happy??? I soon change that here we go...


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Komtie:

Starten van de session wanneer user class wordt aangemaakt:
PHP:
1
2
3
// start a session for this user, by the name of the website
session_name( SITENAME );
session_start();


Bij het inloggen opslaan van de gegevens:
PHP:
1
2
3
function saveDataInSession() {
    $_SESSION["user_data"] = $this->data;
}


En nog expliciet sluiten van de session omdat ik framesets gebruik:
PHP:
1
        session_write_close();


Dat is wel het belangrijkste denk ik. Ik heb nog getwijfeld over het gebruik van een array in die user_data variabele, maar dat werkt gewoon goed tot nu toe.

Acties:
  • 0 Henk 'm!

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 15-09 21:46
Er zijn dan een paar mogelijke oorzaken,

1) Je hebt geen session_start() (al lijkt me dit sterk)
2) Je unset de variabele ergens
3) Je overschrijft ze ergens.. Door bijv. dit:
PHP:
1
2
3
// je session variabele is: $_SESSION['wachtwoord'];

$wachtwoord = 'blaat';

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
1) Session_start is aangeroepen; als ik voor het stukje code nog eens session_start aanroep begint ie te zeuren dat ik dat al eens gedaan heb.

2&3) Kan niet :) De bestanden beginnen met de volgende code:
PHP:
1
2
3
4
5
if (!is_callable(array('currentSite', 'checkCredentials')) || 
    !isset($currentSite) ||
    !($currentSite->checkCredentials(5))) {
    die ("Je hebt niet voldoende rechten om deze pagina te bekijken.");
}


Die controleert of de gebruiker voldoende rechten heeft. Alle beveiligde bestanden beginnen met deze regels. In de header staat welk bestand de gebruiker wil opvragen, dat wordt ge-include. Dit gebeurd zo met alle bestanden, en eentje daarvan geeft problemen, de rest niet.

Nog wat extra info: de session configuratie is op de server exact dezelfde als hier lokaal. Het enige verschil is de php versie; 4.3.10 tegenover 4.3.11

[ Voor 13% gewijzigd door jsiegmund op 11-04-2005 12:07 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Fout mogelijkheid 4 is natuurlijk dat die specifieke pagina geen toegang heeft tot het cookie. Dit kan komen omdat deze via een ander domein wordt opgevraagd of binnen een van een andere site gehaalde frameset zit.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Hmm, alles gebeurd gewoon binnen een aantal directories op dezelfde site, zou niet weten hoe dat problemen moet opleveren? Ik zou kunnen problemen om de cookies helemaal door te geven door alle klassen heen, maar dat is lelijk... :( Zou dat uitmaken?

Terug bij af... ik heb de volgende code ingevoegd bij de functie die waarden uit de sessie ophaalt:
PHP:
1
2
3
        $this->persoonID = (isset($_SESSION["user_persoonID"])) ? $_SESSION["user_persoonID"] : 0;
        $this->level = (isset($_SESSION["user_level"])) ? $_SESSION["user_level"] : 0;
        echo "data from session: ".$this->persoonID."and".$this->level;


Dat geeft op vrijwel iedere pagina data from session: 9and5 wat klopt met de ingelogde gebruiker. Maar op de pagina waar het niet wil werken krijg ik dus zoals verwacht data from session: 0and0. Logisch dus dat de gebruiker geen toegang krijgt.
Printen van de $_SESSION variabele geeft een lege array terug, terwijl er op iedere andere pagina precies de gegevens instaan die ik nodig heb.

[ Voor 109% gewijzigd door jsiegmund op 11-04-2005 15:52 ]


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Waneer ik de pagina niet in de IFRAME laadt maar los, werkt het wel... lijkt er dus inderdaad op dat de cookie niet goed aankomt ofzo. Maar dan blijft alsnog de vraag; waarom werkt het bij andere pagina's in diezelfde IFRAME wel goed?!

Okee nog iets opvallends: deze pagina laadt ik vanuit een popup.. dus de popup veranderd de locatie van het iframe in de browser... zou het daar iets mee te maken hebben? Het verhaal gedraagd zich overigens exact hetzelfde in MOZ als IE

[ Voor 35% gewijzigd door jsiegmund op 11-04-2005 15:58 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Is het domein van je hoofdpagina exact dezelfde als voor de pagina in je IFRAME?
Geef je in je setcookie expliciet een domein en path op of niet?
Stuur je P3P headers?
In welke browser test je? Gaat het ook fout in alternatieve browsers?

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Is het domein van je hoofdpagina exact dezelfde als voor de pagina in je IFRAME?
=> jep

Geef je in je setcookie expliciet een domein en path op of niet?
=> nee, maar in principe heb je setcookie niet eens nodig toch? een sessie moet zijn variabelen gewoon onthouden tot de expire tijd of het sluiten van de browser.

Stuur je P3P headers?
=> wat zijn dat? nee dus :) Ik ga zoeken...

Het simpelweg toevoegen van die P3P header helpt niet.

Nog een beetje verder getest: het ligt aan de pagina's die dmv een popup geladen worden worden.

[ Voor 21% gewijzigd door jsiegmund op 11-04-2005 16:40 ]


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Nog maar wat meer achtergrond informatie aangezien het nog steeds niet werkt, en ik redelijk vervelend begin te worden >:)
De pagina's worden dus geladen vanuit een popup, dit gebeurd d.m.v. een formulier wat als target het iframe heeft. De gebruiker vult een datum op het formulier in, en drukt op de submit knop. Dan wordt de locatie van het iframe veranderd (door het normale target attribuut van HTML) en de popup gesloten. Lijkt erop dat de cookie informatie daartussen ergens verloren gaat, maar waar?

Verder zoekwerk levert op dat het probleem zich niet voordoet wanneer ik de locatie verander vanuit het hoofdscherm (dus via javascript de location van het iframe aanpassen). Wanneer ik de popup ertussen uithaal en het formulier in het iframe zet werkt het ook niet: dus de locatie veranderen vanuit het iframe zelf heeft ook tot gevolg dat de cookie verdwijnt.

[ Voor 28% gewijzigd door jsiegmund op 11-04-2005 17:54 ]


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Sorry, maar het werkt nu nog steeds niet... niemand meer een idee, want ik begin redelijk hopeloos worden :(

Het bovenstaande vermoeden dat het niet werkt wanneer een pagina d.m.v. een form opgevraagd wordt is ook niet 100% waar, want elders gebruik ik ook formulieren (weliswaar binnenin het iframe) en die werken wel goed.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Het probleem is dat je sessie cookie niet wordt meegegeven, waardoor PHP niet weet dat er al een sessie voor jou bestaat, en dus een nieuwe aanmaakt.
Oorzaak hiervan is hoogst waarschijnlijk dat de pagina in een IFRAME is geladen.

Het is vaak een probleem om cookies, ook session-cookies, geset te krijgen in een IE6 browser. Ik heb gemerkt dat het meesturen van een P3P-header dit vrijwel altijd verhelpt. Er is ergens online een tooltje waarmee je de benodigde privacy-file gratis kunt aanmaken en mag gebruiken.. kan m alleen zo snel even niet vinden.

Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Wat een gedoe zeg, als je die pagina nog ergens terug kunt vinden: graag!

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:37

mulder

ik spuug op het trottoir

File is nergens voor nodig, je hoeft alleen de header mee te geven, dat kan in je code of in IIS. Weet je zeker dat de cookie geblockt word trouwens? (Test het eens met lagere security settings in IE)

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Als die cookie geblocked zou worden zou dat wel een bekend probleem zijn neem ik aan, dat is dus niet zo. Daarbij werkt het in Mozilla ook niet, welke naar mijn mening sowieso al een wat minder vervelende beveiliging heeft.
Daarbij: het grootste deel van de pagina's werkt wel gewoon, dus daar kan het gewoon niet aan liggen. Op de een of andere manier krijgen deze pagina's de informatie uit de cookie niet mee.

De pagina's worden geladen vanuit een ander bestand zoals ik hierboven al vermeldde. In dat betreffende bestand heb ik die headers meegestuurd, dus die worden dan automatisch met iedere pagina meegezonden, kan niet fout gaan!

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:37

mulder

ik spuug op het trottoir

Het verhaal van de cookies en P3P is een bekend probleem, al weet ik niet of het met jouw probleem te maken heeft.

Het zou er om kunnen gaan er om dat de browser de popup als een popup van een derde partij ziet, dwz niet van de hoofdsite. Cookies worden dan geblockt.

[ Voor 3% gewijzigd door mulder op 13-04-2005 16:40 ]

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Controleer ook eens op welk path je Session Cookie gezet wordt als het cookie bijvoorbeeld op http://www.mijndomein/mijndir/ gezet wordt en je vraagt http://www.mijndomein/eenanderedir of http://www.mijndomein/MijnDir/ ( let op de hoofdletters ) dan wordt het cookie niet meegegeven omdat het path van het cookie niet goed is.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Installeer LiveHTTPHeaders eens en check of de cookie wel meekomt en identiek is aan de cookie van andere pagina's.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Dat doe ik altijd gewoon met een PHP scriptje die een fsockopen doet.. het kant-en-klare script staat in de manual.

De opmerking van rub is inderdaad een goeie, en meer waarschijnlijk dan P3P, gezien de andere pagina's het wel doen.
Doe anders gewoon een print_r($_COOKIE) om te zien of er een cookie met de naam PHPSESS_ID (oid :?) meekomt.

Acties:
  • 0 Henk 'm!

  • DirkT
  • Registratie: Juli 2002
  • Niet online

DirkT

toet

Het lijkt erop dat die popup dus mogelijk niet het zelfde session_id() krijgt. Je kan het misschien oplossen door gewoon heel simpel in de URL van de popup url.bla.nl?php_sessid=(session_id()) te geven. Zo weet je zeker dat ook dat venster het ID mee krijgt/overneemt.

Tenminste zo denk ik erover maar misschien begrijp ik je fout niet helemaal goed na het topic door te lezen.

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!


Acties:
  • 0 Henk 'm!

  • Steven
  • Registratie: December 2000
  • Laatst online: 05-07 21:17
Ik heb dit probleem ook gehad. Je moet (zoals al meer mensen vertelden) een P3P policy-howto vinden. Het is een pokke werk, en je moet er een programma van IBM voor downloaden (of iig; dat scheelt een hoop werk) EN je moet toegang hebben tot de root van het domein, maar dan heb je ook wat :p

PS: Check maar in Firefox, daar werkt het wel in. Het is een IE functie.

Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Zoals ik dus al vermeldde werkt het ook niet in FF, daarom vind ik dat hele P3P gebeuren een beetje vaag omdat het volgens mij aardig van de MS kant afkomt. Met de andere suggesties ga ik morgen aan de slag, vandaag geen tijd voor: ik houd u allen op de hoogte!

Acties:
  • 0 Henk 'm!

  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 19-09 08:48
Heb m opgelost, het lag inderdaad aan een pad waarin een bestand geopend werd. Doordat ik ergens een foutje had gemaakt met de relatieve paden werd dat toch niet in dezelfde server geopend, kreeg daardoor geen cookie mee en opende vervolgens dus ook de nieuwe pagina zonder cookie. Vandaar geen goeie session variabele et voila; geen authenticatie. Wederom bedankt voor de hulp met het zoeken :)

Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb hetzelfde probleem:

Het is zo dat als ik de pagina normaal in een gehele venster open het goed gaat (privacy beleid staat dan op Normaal in IE 6.)

Maar bij iframes gaat het dan fout met deze instelling omdat hij dan geen sessions schijnt te onthouden.

Als ik de instelling van privacy verlaag naar Laag in IE 6 dan doet hij het ook goed in iframes.

2 vragen:

1. waarom is dit verschil en hoe kan ik dit verschil omzeilen? (zit het verschil in Directe cookies en Indirecte cookies? zoja, hoe kan ik dan van die indirecte cookies zorgen dat deze direct worden in een iframe)

2. kan ik zorgen dat - als ik die indirecte cookies niet kan veranderen - ik iets met dat privacy kan doen. iets meegeven ofzo?

Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 21:37

mulder

ik spuug op het trottoir

1) De in het iframe geladen website word gezien als een derde partij.
2) In IIS of in code een header meegeven met een P3P string

oogjes open, snaveltjes dicht

Pagina: 1