Kan iemand me uitleggen wat het verschil is tussen session_id() en session_regenerate_id()? En hoe ik het precies moet toepassen voor een login script.
De session_id is er toch alleen voor om te achterhalen welke gegevens uit de db moeten komen?
sessies hebben niks te maken met de gegevens in je database, tenzij jij dat zo doet en sessie ID's een betekenis geeft in de database (wat in mijn ogen je nooit zou kunnen doen, maar ja we weten het nooit).
Verschil tussen beide functies is simpel, session_id() geeft het huidige sessie ID terug en de andere genegeerd een nieuwe ID voor de huidige sessie.
Kijk, sessies zijn bedoeld om dingen op te slaan die gebruikt kunnen worden over een langere tijd. Dus langer dan de duur van 1 pagina. De sessie ID (of SID) wordt gebruikt om deze sessie te herkennen. de client (de opvrager) krijgt deze sessie ID en deze wordt opgeslagen in een cookie, die met elke aanvraag weer verstuurd wordt. Op de server wordt de sessie ID weer gekoppeld aan een set variables of iets anders wat je wilt gebruiken.
Om proper gebruik te kunnen maken van sessies moet je het volgende functie aanroepen aan het begin van de php pagina:
session_start();
Daarna kun je met session_id() de ID van de sessie opvragen, en session_regenerate_id() genereert een nieuwe ID voor de huidige sessie (hij kopieert de waarden van de vorige sessie gewoon naar de nieuwe sessie).
Het genereren van een nieuwe ID wordt vaak gebruikt nadat de rechten van een gebruiker is verhoogt, (bijv inloggen). Dit om session-fixation voor te komen.
Dus als ik het goed begrijp:
- session_id aanmaken en opslaan in cookie (mag dat ook een get-variabele zijn?)
- inloggen
- cookie controleren met SID? (of waarmee?)
- nieuwe session_id aanmaken met session_regenerate_id()
Maar hoe weet ik nou welke gebruiker het is? Kan ik daar de session_id niet voor gebruiken? of moet ik gewoon een id opslaan in een sessie die de gegevens op andere pagina's ophaalt uit de db?
als je session_start(); gebruikt in elke pagina waar je sessies wilt gebruiken doet PHP al veel voor je, dit is het creëren van de eerste ID als er nog geen één is. Deze meegeven in een cookie enzovoort. Als het al bestaat, haalt hij alle sessie waardes al voor je op.
Maar hoe weet ik nou welke gebruiker het is? Kan ik daar de session_id niet voor gebruiken? of moet ik gewoon een id opslaan in een sessie die de gegevens op andere pagina's ophaalt uit de db?
Nope, omdat de sessie keer op keer kan veranderen per gebruiker is het niet echt een ID die je wilt gebruiken. Je kunt wel andere dingen opslaan in de sessies (pak een session tutorial zou ik zeggen) bijvoorbeeld de ID van de ingelogde gebruiker.
PHP doet al veel voor je, mijn vorige post was beetje bedoeld als wat gebeurt er achter de schermen. En zo verstrooid ik ben, ben ik in feite vergeten de dingen vergeten wat PHP al voor je doet ;)
Ik heb gezocht naar een tutorial. Maar het enige wat ik vind over sessions is $_SESSION.
Het eerste wat ik doe bij mijn inlogscript is:
- ip controleren ($_SESSION['ip'] ==$_SERVER['REMOTE_ADDRESS'])
- wachtwoord md5()
Nu moet ik gegevens uit de db halen voor die gebruiker. Ook op andere pagina's. Dus wat gebruik ik? Een id? Als een hacker dat ziet kan ie dat gewoon naar de server sturen toch? En ik snap nog steeds niet waar die session_id wordt gebruikt bij het inloggen. Wat heb je aan de session_id in een script als session_start() alles al doet. Of moet je het met een if statement controleren?
In jouw geval is die session ID niet echt van belang, het is er in gelaten voor het geval dat mensen werkelijk die sessie ID willen gebruiken voor een of ander doel (alhoewel ik nooit een doel ervoor heb gevonden).
En klopt, variables van sessies sla je op in de globale array $_SESSION.
Verder heb ik het gevoel dat je de sessie ID nu aanziet voor de ID van de record van de gebruiker in de database. Kort gezegd zijn dit twee hele andere dingen. Als je ingelogd bent, sla je de ID van de gebruiker-record in de database op in de sessies. Zodat je later weer die record op kan zoeken en dingen kan lezen/manipuleren wat je maar wilt. de sessie ID heeft hier weinig mee te maken.
In de database van phpbb versie 3.0 zie ik wel een tabel met sessions en een kolom session_id met als inhoud bijvoorbeeld ae55e97c327d3654f90079e05bf6505a. Iemand een idee waar dat voor is?
EDIT:
Misschien ben ik in de war met een hash. Ik kwam het volgende tegen:
annuh schreef op 25.07.2007 22:25
Hallo,
Bedankt voor deze tutorial!
Zou iemand mij alleen deze code willen uitleggen?
// controleren van de hash
if ($_SESSION[‘hash’] == $md5hash)
{
// hash komt overeen! Sessie is geldig!!
}
?>
Ik wil namelijk op de inlogpagina van mijn inlog script een random code generen (hash toch?) en die code in een session zetten en zodoende op de volgende pagina's controleren of het nog steeds dezelfde persoon is.
Gebeurd dat hier ook? Maar wat moet ik dan op de inlogpagina zetten en wat op de 'vervolgpagina' om te kijken of het nog steeds dezelfde sessie is?
Alvast bedankt!
Dit heb ik volgens mij nog niet verwerkt in mijn inlog script. Is dit de moeite waard?