简体   繁体   中英

PHP session variable not persisting through AJAX call

I wanted to use HTML links to change a session variable in PHP. To do this, I set up an HTML "a" tag that would call a javascript function that looks like this:

function changeValue(name){
  data = "key='person'&value=" + _name;
  $.ajax({
      url: www_root + "/funcs.php?func=set_session_var",
      type: "post",
      data: data,
      success: function(data){
          console.log(data);
      }
  }); 
  }

Then, I had the funcs.php script which had the set_session_var function like this:

function set_session_var(){
   session_start();
   $key= trim($_GET["key"]);
   $value= trim($_GET["value"]);
   $_SESSION[$key] = $value;
   session_write_close();
   echo $key;
}

Then, the original php/html page would reload, but it would first load an external page (call it item.php) that settled all of the php session stuff. Looks like this:

session_start()
$session_id = session_id();
$sc = $_SESSION['person'];

However, the $sc variable always shows up as empty, despite the AJAX success function returning the right value. I've checked the session_id's for both scripts, and they are the same. I have also tried to set a session variable in item.php, and it persists. It's just that when I set a session variable using the funcs.php script it doesn't save.

Any and all ideas are appreciated!

You're sending quotes:

data = "key='person'&value=" + _name;
            ^------^

which means you're effectively doing:

$_SESSION["'person'"] = $value;
           ^------^-

Note that those single quotes have become PART of the session key name.

Try

data = "key=person&value=" + _name;
            ^----^--- no quotes

instead.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM