onlydimon
onlydimon

Reputation: 525

Unable to change session variable through AJAX

I have the message-block in the header of my site. When a user clicks "close msg", the message should disapear and can't be seen during current user session. So I decided to use jQuery Ajax:

$('#lang-msg .close').on('click', function(event) {
    event.preventDefault();
    $.ajax({
        url:"remlmsg.php",
        type:"POST",
        data:"id=2,myajaxquery=true ",
        success:function(html){
            console.log(html);
            $('#lang-msg').fadeOut(300,function() {
                $(this).remove();
            })
        }
    })
})

And in remlmsg.php I have only code, which defines new session variable:

    $_SESSION['langmsg'] = 'hide';
    echo $_SESSION['langmsg'];

In the header.php file I check if $_SESSION['langmsg'] is undefined.

if (!isset($_SESSION['langmsg'])) {         
    if ($sLanguage == 'ru') {
        echo '<script type="text/javascript">
                $( function() {
                    showLangMessage("en");  
                })
            </script>';
    }
}

And it says always true! But when I print request data in ajax function it displays 'hide'. Explain to me, please, where I did mistake.

P.S. Tested on local server (latest WAMP)

Upvotes: 0

Views: 2024

Answers (2)

Justin Buser
Justin Buser

Reputation: 2871

Actually the problem you're having is that ajax calls will have a different session id, which has to do with the headers sent/received by both sides.

Try generating some javascript with PHP like:

var phpSessionId='<?=session_id()?>';

then in your remlmsg.php add this to the very top:

if(isset($_POST['session-id'])) session_id($_POST['session-id']);
session_start();

Finally in your ajax call use:

data:"id=2,myajaxquery=true,session-id=" + phpSessionId,

That should solve your problem.

Upvotes: 0

Machavity
Machavity

Reputation: 31614

You need to have session_start() declared first. Otherwise you'll only edit a local variable that isn't stored anywhere.

Upvotes: 2

Related Questions