Wanneer wordt sessie cookie weggeschreven?
Ik krijg de indruk dat dit is aan het einde van het script waar de aanroep session_start() in staat.
Maar ik kan het niet helemaal helder krijgen.
(Ik vraag me eigenlijk af of een sessie cookie ALTIJD kan worden weggeschreven. Bijvoorbeeld als iemand z'n browser zo heeft ingesteld dat deze geen cookies accepteert...)
Een cookie staat op de client, dus bij de gebruiker. Wordt geinitieerd met de functie setcookie: setcookie(name, value, expire, path, domain);
Een sessie staat op de server en is geen cookie. Een sessie wordt geinitieerd met session_start() en dit is dus geen cookie.
Omdat ik bij eindigen van de sessie de rommel op wil ruimen.
Dat probeer ik met onderstaande opdrachten :
$_SESSION = array();
session_destroy();
if( isset($_COOKIE[session_name()]) ) {
//setcookie(session_name(),'',time()-42000,'/');
}
Maar ik krijg foutmeldingen dat de header al verzonden is voor de setcookie regel.
Dat ik die kan krijgen snap ik. Wat ik niet snap is dat ik die foutmelding bij een 1e run van het programma niet krijg. Nadat ik het 2 of meer keren achter elkaar run, krijg ik die foutmelding wel.
Daardoor krijg ik het idee dat het te maken heeft met het moment dat de cookie weggeschreven wordt.
En wat ik moet doen met browsers die geen cookies accepteert weet ik niet. Dan kan ik geen sessie onderhouden lijkt mij. Want dan is er geen herkenningsteken aan de kant van de browser.
Toevoeging op 16/12/2010 10:05:06:
Session_start() maakt een cookie met het sessie_Id aan. Anders weet kan de server toch nooit weten wie je bent? Maak maar eens een php script met alleen die functie. Ik zie dan in de browser de cookie met sessie_is
session_start() heeft niets met cookies te maken, sessions_start() opent een sessie bestand op de server en daarin kan je ook gegevens van pagina naar pagina transporteren.
Edit:
Zijn twee verschillende zaken, check:
http://www.w3schools.com/PHP/php_sessions.asp
http://www.w3schools.com/PHP/php_cookies.asp
http://www.w3schools.com/PHP/php_sessions.asp
http://www.w3schools.com/PHP/php_cookies.asp
Gewijzigd op 16/12/2010 10:13:28 door John D
@Ellen: ik eindig m'n sessie zo:
$_SESSION = array();
session_destroy();
session_start();
session_regenerate_id();
Waarom open je na afsluiten op het einde weer een nieuwe sessie?
(Cookie met sessie-ID kun je gewoon zien in je browser trouwens.)
Ik zoek dus nog steeds iemand die exact weet wanneer die cookie geplaatst wordt.
Gewijzigd op 16/12/2010 10:20:04 door Ellen P
Ozzie PHP op 16/12/2010 10:13:19:
@Ozzie, klopt maar dat is niet waar Ellen mee bezig is, lees haar tekst en dan zie je dat ze cookie en session door elkaar haalt.@John D: ja maar als je zegt session_start wordt er toch automatisch een cookie
@John: oke, session_start() schrijft dus automatisch een cookie weg, maar wat als de gebruiker cookies geblokkeerd heeft? (of zijn sessie cookies daar van uitgezonderd?)
Wanneer ik een programma maak waarin alleen session_start() staat. Ik krijg dan een cookie onder de naam SESSID. (Naam kun je trouwens wijzigen met PHP-functies). In die Cookie staat het sessie-id.
@Ellen: mijn manier start inderdaad weer een nieuwe sessie, maar die is dan leeg en het sessie id wordt ook meteen gewijzigd (ook in de cookie).
Je kunt met: session_id het sessie id ophalen/instellen.
Volgens mij wil ze 'm niet uitlezen, maar deactiveren.
Maar in ieder geval graag antwoord op de vraag, wanneer wordt die cookie geplaatst. ? Exact wanneer.
Gewijzigd op 16/12/2010 10:44:29 door Ellen P
Ik denk dat je dan het beste gewoon naar session_destroy kunt kijken.
Ik wil feitelijk graag weten wanneer die cookie geplaatst wordt. Ik krijg namelijk de indruk dat dit is aan het einde van een schript waarin sessie_start staat. Maar weet niet hoe ik dit zou moeten testen.
Gewijzigd op 16/12/2010 10:47:03 door Ellen P
Ozzie PHP op 16/12/2010 10:33:23:
@Ellen: mijn manier start inderdaad weer een nieuwe sessie, maar die is dan leeg en het sessie id wordt ook meteen gewijzigd (ook in de cookie).
Alles van de cookie wordt hierdoor dus opgeruimd.
(Ben nog steeds benieuwd wat er gebeurt als iemand bewust cookies blokkeert overigens. Worden sessie cookies uitgezonderd?)
Heb ik getest wanneer je cookies blokkeert, dan werkt je sessie_id niet, en kun je geen sessie opbouwen die herkent wordt. Dus is het mij volkomen onduidelijk hoe je dan een applicatie zou kunnen draaien die uit meerdere scripts bestaat.
Ellen P op 16/12/2010 10:43:04:
Ik neem aan direct bij session_start() wordt het cookie met het sessionid geschreven. Voor het opruimen check dit:Maar in ieder geval graag antwoord op de vraag, wanneer wordt die cookie geplaatst. ? Exact wanneer.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
If you want to delete a session cookie, you can do it with this code:
<?php
session_start();
// many code
$sessionName = session_name();
$sessionCookie = session_get_cookie_params();
session_destroy();
setcookie($sessionName, false, $sessionCookie['lifetime'], $sessionCookie['path'], $sessionCookie['domain'], $sessionCookie['secure']);
?>
This works also well if the session cookie params or the session name were changed.
<?php
session_start();
// many code
$sessionName = session_name();
$sessionCookie = session_get_cookie_params();
session_destroy();
setcookie($sessionName, false, $sessionCookie['lifetime'], $sessionCookie['path'], $sessionCookie['domain'], $sessionCookie['secure']);
?>
This works also well if the session cookie params or the session name were changed.
Dit wordt in de browser gezet worden als de response ontvangen is. En stuurt de browser met de volgende request mee.
Je sessie kunnen ook werken zonder cookies, dan moet het via de url meegegeven worden. Dit wordt vaak niet toegestaan.
Hoe kan ik in IE8 cookies blokkeren? Ik heb net het beveiligingsniveau op z'n allerhoogst ingesteld, maar sessie werkte nog steeds :-s