Reputation: 12727
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
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
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