2010-05-04 17 views
3

所以在我的PHP我有這樣的事情如何使用Ajax函數從php服務器獲取會話變量? (PHP HTML JS阿賈克斯)

$_SESSION['opened'] = true; 

,但它不會被設置爲true,直到用戶將與其他一些HTML \ PHP頁面

所以執行某些操作我需要一些Ajax函數來獲取這個會話變量。還有一些PHP函數的樣本可以通過Ajax獲取。

所以我需要的東西給AJAX請求一個動作(對一些簡單的PHP代碼),它將返回一個值從$_SESSION

如何做這樣的事情?

回答

13

簡單jQuery例如:

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

而且getsession.php

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

你不需要使用jQuery的AJAX,但我強烈推薦它。

編輯:

迴應:

我希望能夠告訴我的JS功能我要得到什麼變量。

你可以試試這個(未經測試):

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

而且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); 
} 

看一看在$.get文檔更詳細的介紹。

+0

是的!我喜歡它,但如何獲得特定的會話變量?我想我能夠獲得特定的會話變量 - 不是全部。我希望能夠告訴我的JS函數我想獲得什麼變量。 – Rella 2010-05-04 12:34:15

+0

只需將變量名作爲請求參數傳遞,以便PHP知道要返回什麼? – BalusC 2010-05-04 12:38:59

+0

$。get()會緩存結果,這對會話不利。看到我的答案。 – 2010-05-04 12:41:16

3

PHP文件在http://my.host/response.php

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

然後在HTML,添加jQuery如:

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

然後:

<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> 

,並加入到myform.php

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

由於這將給那些沒有JavaScript的人提供一致的體驗。您不必顯示/隱藏div。你真的可以做任何事情。

+0

您需要調用'session_start()'初始化會話數據。 – Matt 2010-05-04 12:47:25

+2

不,我把它設置爲在php.ini中自動啓動:P不要那麼迂腐。 – 2010-05-04 12:48:33

+0

嘿,如果你要挑選我緩存問題,我會回來;) – Matt 2010-05-04 12:49:23