[PHP]Sessies raken door de war

Pagina: 1
Acties:
  • 160 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 21:48
Hallo iedereen ;)

Ik ben bezig met het bouwen van een nieuwe website voor me stage bedrijf.
Het volgende probleem ben ik al eerder een paar keer eerder tegen gekomen. De enigste oplossing was het phpscript(pagina ophalen/nieuws ophalen/whatever) opnieuw schrijven.

Ik heb het volgende probleem:

Als ik op een paar hoofdpagina's en subpagina's klik dat mijn sessies door de war raken.
Log ik opnieuw uit/in zijn me sessies weer goed. Klik ik daarna weer door op de hoofdpagina's & subpagina's raken me sessies weer door de war.

Code main.php http://paste.pcwereld.be/showpaste.php?p=1509 (voor de hoofdpagina's)
code page.php http://paste.pcwereld.be/showpaste.php?p=1510 (voor de subpagina's)
code login.php http://paste.pcwereld.be/showpaste.php?p=1511 (login pagina)

Iemand een tip in welke richting ik moet zoeken?

Acties:
  • 0 Henk 'm!

Verwijderd

Je zou eens moeten kijken daar waar je de database opent.
Ik vermoed dat je daar ook username en/of pass hebt gebruikt.

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 13-09 20:30

kokx

WIN

Ik zie nergens session_start() staan, mischien een idee om dat er wel bij te zetten?

Acties:
  • 0 Henk 'm!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 21:48
Verwijderd schreef op maandag 09 juli 2007 @ 15:11:
Je zou eens moeten kijken daar waar je de database opent.
Ik vermoed dat je daar ook username en/of pass hebt gebruikt.
Je bedoelt de ingerichte table @ database?

cms_users
id
username
pass
email
lvl

Acties:
  • 0 Henk 'm!

  • _Apache_
  • Registratie: Juni 2007
  • Laatst online: 21:06

_Apache_

For life.

kokx schreef op maandag 09 juli 2007 @ 15:12:
Ik zie nergens session_start() staan, mischien een idee om dat er wel bij te zetten?
^, en let op dat je dat altijd bovenin je script hebt staan..

Zero SR/S 17.3kWh / 2700WP PV / HRSolar zonneboiler


Acties:
  • 0 Henk 'm!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 21:48
kokx schreef op maandag 09 juli 2007 @ 15:12:
Ik zie nergens session_start() staan, mischien een idee om dat er wel bij te zetten?
index.php > include($map.'config.php'); (daarin staat me session start)
include($map.'function.php');
include($map.'settings.php');

Acties:
  • 0 Henk 'm!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 21:48
_Apache_ schreef op maandag 09 juli 2007 @ 15:14:
[...]

^, en let op dat je dat altijd bovenin je script hebt staan..
Elke keer als ik index.php gebruik connect hij opnieuw naar de database + hij start een sessie op

Acties:
  • 0 Henk 'm!

Verwijderd

Maar als je index.php dus opnieuw start (dus een nieuwe sessie krijgt) is het probleem
toch makkelijk opgelost: of controleren of er een sessie is of juist een sessie sluiten.

Acties:
  • 0 Henk 'm!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 21:48
Verwijderd schreef op maandag 09 juli 2007 @ 15:23:
Maar als je index.php dus opnieuw start (dus een nieuwe sessie krijgt) is het probleem
toch makkelijk opgelost: of controleren of er een sessie is of juist een sessie sluiten.
Als ik de huidige sessie sluit kan ik niet meer op het Admin gedeelte ivm het controleren welk lvl recht ik heb. Hij zoekt in de database op me lvl van mijn unieke userID die als sessie opgeslagen is.
(zie login.php)

edit-
Is het dan niet slimmer om die Session start in mijn login.php te zetten?

edit2
Zodra ik session start in login.php ga zetten krijg ik de zogenaamde already send headers errors

[ Voor 16% gewijzigd door Mud op 09-07-2007 15:37 ]


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Tja, de session already sent errors zijn redelijk makkelijk zelf op te lossen. De foutmelding is behoorlijk duidelijk. Ik snap echter neit waarom je die enkel in je login neer wilt zetten. Wil je gebruik maken van je sessie dan zul je de sessie bij elke request moeten 'starten'. Sowieso maakt het 'starten' van een sessie deze niet leeg dus dat moet ook niet de reden zijn dat deze in de war raakt.

Sowieso snap ik erg weinig van je probleem. Je hebt het over 'in de war' raken, maar omschrijf dat eens duidelijk. Wat zijn de symptomen? Wat is er in de war?

Of ben je op 1 computer meerdere keren ingelogd op de site? Ja, dat wordt nu eenmaal niet uit elkaar gehouden.

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!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 21:48
Tja, de session already sent errors zijn redelijk makkelijk zelf op te lossen. De foutmelding is behoorlijk duidelijk. Ik snap echter neit waarom je die enkel in je login neer wilt zetten. Wil je gebruik maken van je sessie dan zul je de sessie bij elke request moeten 'starten'. Sowieso maakt het 'starten' van een sessie deze niet leeg dus dat moet ook niet de reden zijn dat deze in de war raakt.
Dus het beste is die weer terug te stoppen in config.php/index.php aangezien ik al in het menu ga checken via sessies of ik de admin link te zien krijg?
Sowieso snap ik erg weinig van je probleem. Je hebt het over 'in de war' raken, maar omschrijf dat eens duidelijk. Wat zijn de symptomen? Wat is er in de war?
Als ik inlogd ben op de website en klik op een paar main/sub links krijg ik op een gegeven moment de link Admin CP niet meer te zien. Dit is random, soms krijg ik de link wel te zien en soms helemaal niet meer na 10 sec klikken op de main/sub links. Log ik uit en weer in dan krijg ik weer direct de link Admin CP te zien. Ga ik weer klikken gaat het weer fout
Of ben je op 1 computer meerdere keren ingelogd op de site? Ja, dat wordt nu eenmaal niet uit elkaar gehouden.
Op 1 computer met 1 browser(opera) ben ik ingelogd


-edit
Als ik nu mijn sessies ga echo'en zie ik dat in 1 keer mijn sessie ID(userid, zie login.php) veranderd is in 3, terwijl mijn user id in de database 1 is.

[ Voor 6% gewijzigd door Mud op 09-07-2007 16:10 ]


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Het lijkt me niet dat je sessieId gelijk moet zijn aan je userId. Naast dat dat volkomen onveilig is, is dat ook helemaal niet de bedoeling van een sessie. Deze genereert als het goed is zijn ID's zelf. De userID is iets dat je gewoon zelf in de sessie op moet slaan.

Als het daadwerkelijk een opgeslagen sessie variabele is die ineens 3 wordt dan zou ik toch maar eens je code gaan doorlopen om te kijken waar je hem zelf aan het aanpassen bent. Dat gaat echt niet vanzelf.

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!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 21:48
Janoz schreef op maandag 09 juli 2007 @ 16:20:
Het lijkt me niet dat je sessieId gelijk moet zijn aan je userId. Naast dat dat volkomen onveilig is, is dat ook helemaal niet de bedoeling van een sessie. Deze genereert als het goed is zijn ID's zelf. De userID is iets dat je gewoon zelf in de sessie op moet slaan.

Als het daadwerkelijk een opgeslagen sessie variabele is die ineens 3 wordt dan zou ik toch maar eens je code gaan doorlopen om te kijken waar je hem zelf aan het aanpassen bent. Dat gaat echt niet vanzelf.
login.php

code:
1
2
3
4
//Nadat alles gecontroleerd is
//In $check zit dus alles van de gecontroleerde (goeie) user
$_SESSION['id']= $check['id'];
$_SESSION['username']= $check['username'];


-edit
Inmiddels gebruik ik geen $_SESSION['id'] meer en werkt het plotseling wel prima tot zo ver

[ Voor 6% gewijzigd door Mud op 09-07-2007 16:47 ]


Acties:
  • 0 Henk 'm!

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

Janoz

Moderator Devschuur®

!litemod

Dus je slaat het gewoon zelf op in de sessie (dan is het natuurlijk niet de sessionId).

Als dat ergens 3 wordt dan heb je toch echt ergens een fout in je code gemaakt. Ga nog eens kritisch door je hele programma heen en doorloop stap voor stap je code om te zien wat er nu eigenlijk gebeurt. Voeg hier en daar wat debug meldingen toe. Zeker als er ineens een andere id in de sessie komt te staan moet je dat zelf gedaan hebben.

Staat misschien register globals nog aan? In dat geval kan het heel goed dat je $id aan het overschrijven bent.

[ Voor 11% gewijzigd door Janoz op 09-07-2007 16:46 ]

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!

  • Mud
  • Registratie: Februari 2007
  • Laatst online: 21:48
Janoz schreef op maandag 09 juli 2007 @ 16:45:
Dus je slaat het gewoon zelf op in de sessie (dan is het natuurlijk niet de sessionId).

Als dat ergens 3 wordt dan heb je toch echt ergens een fout in je code gemaakt. Ga nog eens kritisch door je hele programma heen en doorloop stap voor stap je code om te zien wat er nu eigenlijk gebeurt. Voeg hier en daar wat debug meldingen toe. Zeker als er ineens een andere id in de sessie komt te staan moet je dat zelf gedaan hebben.

Staat misschien register globals nog aan? In dat geval kan het heel goed dat je $id aan het overschrijven bent.
Zelf als ik iets tegen kom wat niet werkt doe ik regelmatig een echo gebruiken om te kijken of er uberhaubt wel iets in de variablen staat etc.

Blijkbaar lag het toch echt aan de $_SESSION['id'] die ik gebruikte, nu ik $_SESSION['username'] gebruik werkt het prima.
Pagina: 1