Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

so in my php I have something like this

$_SESSION['opened'] = true;

But It will not be set to true until user will perform some actions with some other html\php pages

So I need on some Ajax function to be able get this session variable. And some PHP sample of function to get variable in form ready for Ajax to get it.

so I need something to AJAX requesting to an action (to some simple php code) which will return a value from $_SESSION.

How to do such thing?

share|improve this question
add comment (requires an account with 50 reputation)

2 Answers

up vote 4 down vote accepted

Simple jQuery example:

var session;
$.ajaxSetup({cache: false})
$.get('getsession.php', function (data) {
    session = data;
});

And getsession.php:

<?php
session_start();
print json_encode($_SESSION);

You're not required to use jQuery for AJAX, but I highly recommend it.

Edit:

In response to:

I want to be able to tell my JS function what variable I want to get.

You can try this (untested):

var session;
$.ajaxSetup({cache: false})
$.get('getsession.php', {requested: 'foo'}, function (data) {
    session = data;
});

And the PHP:

<?php
session_start();
if (isset($_GET['requested'])) {
    // return requested value
    print $_SESSION[$_GET['requested']];
} else {
    // nothing requested, so return all values
    print json_encode($_SESSION);
}

Have a look at the $.get documentation for a more detailed overview.

share|improve this answer
Yes! I love It, but how to get specific session variable? I meen I want to be able to get specific session variable - not all. and I want to be able to tell my JS function what variable I want to get. – Spender May 4 '10 at 12:34
Just pass variable name as request parameter so that PHP knows what to return? – BalusC May 4 '10 at 12:38
$.get() will cache the result, which isn't good for sessions. See my answer. – Aiden Bell May 4 '10 at 12:41
@Ole see my updated answer to request specific variables. I also updated the code so you can use the handy $.get syntax without worrying about it caching. – Matt May 4 '10 at 12:43
add comment (requires an account with 50 reputation)

PHP File at http://my.host/response.php

<?php
session_start();
if(isset($_SESSION['opened']))
    echo "true";
?>

Then in HTML, Add jQuery such as:

<script type="text/javascript" src="/path/to/jQuery-x.y.z.js"></script>

Then:

<script type="text/javascript">
    $(document).ready(function(){
        $.ajax({
            url:'/response.php',
            cache:false,
            success:function(data){
                // Do something with the result
                if(data=="true"){
                    $('#mydiv').show();
                }else{
                    $('#mydiv').hide();
                }
            }
        );
     });
</script>

And add to myform.php:

<h1>Some Random HTML</h1>
<div id='mydiv' class="<?php if(isset($_SESSION['opened']) && $_SESSION['opened']) echo "hidden_class";?>">
 ...</div>

As this will give a consistent experience to those without JavaScript. You don't have to be showing/hiding a div. You could do anything really.

share|improve this answer
You need to call session_start() to initialize the session data. – Matt May 4 '10 at 12:47
No, I have it set to auto-start in php.ini :P Don't be so pedantic. – Aiden Bell May 4 '10 at 12:48
Hey, if you're going to pick at me for cache issues, I'm going to pick back ;) – Matt May 4 '10 at 12:49
I think there is a difference is subtlety. Never mind. – Aiden Bell May 4 '10 at 12:51
Both of our points were legitimate. I just don't think you should assume someone who is new-ish to PHP to have non-default settings enabled. He's probably on a shared host anyway. – Matt May 4 '10 at 12:52
show 4 more commentsadd comment (requires an account with 50 reputation)

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.