ThinkingMonkey
ThinkingMonkey

Reputation: 12727

Session-cookies: Weird Behaviour? Or Have I not understood something here?

Here is the piece of code:

session_name('somename');
session_start();
echo 'session name:'.session_name();

The above does print the session name as somename. If I append the code below,

if(isset($_COOKIE['somename'])) {
 echo "<br/><br/>"."Cookie somename not yet set";
 }
else {
 echo "<br/><br/>".var_dump($_COOKIE['somename']);
 }

The output is always

Cookie somename not yet set.

Am I using the isset function wrong?

If I just append this:

 echo "<br/><br/>".var_dump($_COOKIE['somename']);

Then, the output for the first time is:

session name:somename
Notice: Undefined index: somename in /path/to/file.php on line 12 NULL

If I refresh the page, then the output is

session name:somename
string(26) "367jr029jj17mdu5fgkfgiv0u6"

Isn't the cookie variable supposed to get set before the page content is loaded? or Have I not understood sessions/cookies?

Upvotes: 0

Views: 150

Answers (2)

Herbert
Herbert

Reputation: 5778

Expanding on Jani Hartikainen's answer

isset() checks to see if $_COOKIE['somename'] is set.

First time through before cookies are set:

// $_COOKIE['somename'] is NOT set so skip to else
if(isset($_COOKIE['somename'])) {
 echo "<br/><br/>"."Cookie somename not yet set";
 }
else {
 // $_COOKIE['somename'] is NOT set so you get an error.
 echo "<br/><br/>".var_dump($_COOKIE['somename']);
 }

Second time through after cookies are set:

// $_COOKIE['somename'] is set so show message
if(isset($_COOKIE['somename'])) {
 echo "<br/><br/>"."Cookie somename not yet set";
 }
else {
 // $_COOKIE['somename'] is set so skip this part.
 echo "<br/><br/>".var_dump($_COOKIE['somename']);
 }

A more appropriate use of isset would be something like:

if(isset($_COOKIE['somename'])) {
 echo "<br/><br/>".var_dump($_COOKIE['somename']);
 }
else {
  echo "<br/><br/>"."Cookie somename not yet set";
 }

In the last example I use isset to determine if $_COOKIE['somename'] has been set. If so, then I dump it; otherwise, I show the message “Cookie somename not yet set”

Upvotes: 1

Jani Hartikainen
Jani Hartikainen

Reputation: 43243

Cookies aren't set into $_COOKIE until the browser actually sends them.

It works something like this:

Request 1:

Your script starts
$_COOKIE is empty
session_start()
Your script ends
-> cookies to browser

Request 2:

<- browser sends cookies in request
Your script starts
$_COOKIE contains your cookie
...    

Upvotes: 1

Related Questions