简体   繁体   中英

Why don't PHP variables stay set when assigned values in a jQuery AJAX request

I'm logging in a user with a jQuery $.post AJAX request and in the ajax.php im setting the $_SESSION['login'] variable (the session_start() was called in index.php) along with other login stuff, however when I try reference the $_SESSION['login'] variable on other pages then it is not set...

this is my POST code

    $.post('/assets/ajax/ajaxLogin.php',{username: $('[name=username]').val()
    ,password: $('[name=password]').val()},function(data){

    if(data.success)
    {
      location.href=data.redirect;     
    }
    else
    {
      $('#errorConsole').html(data.message).slideDown();
    }

    },'json');

and in ajaxLogin.php i am setting $_SESSION['login']="1". So ajax script logs the user in if they have the right info, but when they are redirected to dashboard.php, I try to echo $_SESSION['login'] and I get an error,

Am I not setting the $_SESSION correctly, or will the ajax request not set variables globally??

this is the ajaxLogin.php

    <?php 

    if(!include('../../config.php')){
        echo 'include failure';
    }

    if($_POST){

        $myusername=$_POST['username']; 
        $mypassword=$_POST['password'];
        // To protect MySQL injection (more detail about MySQL injection)
        $myusername = stripslashes($myusername);
        $mypassword = stripslashes($mypassword);
        $myusername = mysql_real_escape_string($myusername);
        $mypassword = mysql_real_escape_string($mypassword);

        $sql="SELECT * FROM users WHERE username='$myusername' and                 password='$mypassword'";
        $result=mysql_query($sql);

        // Mysql_num_row is counting table row
        $count=mysql_num_rows($result);
        if($count==1)
        {
            $_SESSION['login'] = 1;
            $data['success'] = true;
            $data['redirect'] = '/dashboard.php';
        }
        else
        {
            $data['success'] = false;
            $data['message'] = "Your info is wrong....";
        }
        echo json_encode($data);
    }

    ?>

and also here is dashboard.php

    <?php 
        include('includes.php');
    ?>
    <?php
    if(!isLoggedIn())
    {
    echo 'You are not logged in';
    }
    else
    {
    echo 'You are logged in';  
    }
    ?>

and isLoggedIn() is:

    function isLoggedIn(){

        if (isset($_SESSION['login'])){
            return 1;
        }
        else
        {
            return 0;
        }
    }

You need to call session_start() on every page that uses sessions (and before you use them). This includes each file used in an AJAX request as well as the dashboard.php file.

Note: doesn't apply to files included with include / require .

How are sessions saved on the client side?

If you are using a cookie, double-check to make sure that cookie is being sent by the browser on the next request. If it is, something's wrong with your session code and we'll need to see your PHP. If it isn't, check your PHP error logs for something about sessions being unable to be saved.

If you are using URL query strings, make sure you're passing them between requests.

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