dozpv84422 2011-12-15 07:04
浏览 26
已采纳

会话cookie:奇怪的行为? 或者我在这里不明白?

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?

  • 写回答

2条回答 默认 最新

  • dongqiang5541 2011-12-15 07:33
    关注

    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”

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?