2012-05-16 59 views
4

我在CakePHP中創建的會話是這樣的:如何在JavaScript中訪問會話?

$User = array('userid'=>232, 'access'=>1) 
$this->Session->write('User',$User); 

現在我想用檢查會話userid的JavaScript/jQuery的

是否有訪問此會議的JavaScript任何直接的方法。

感謝

回答

16

有直接本屆會議JavaScript的任何直接的方法訪問。

編號會話數據存儲在服務器上。

爲了訪問它,您需要通過PHP在URI上公開它,然後對該URI發出HTTP請求(可能使用Ajax)。

2
// js function 
var getUserId = function() 
{ userId = null; 
$.ajax({ 
    type: "POST", 
    url: "ajax.php", // @TODO set the right Path 
    async : false, 
     success: function(msg) 
    { 
     userId = msg;     
    } 
    }); 
return userId; 
} 
/*PHP ajax.php*/ 
<?php 
echo $this->Session->get('User'); or $_SESSION['User'] 
?> 

--- CAll---------- 

var userId = getUserId(); 
2

爲什麼你會檢查客戶端,它可以僞造,manipulted等上的用戶標識?只需使用會話ID。

除此之外,還有兩種方法可以將用戶標識暴露給JavaScript。這兩個有不需要額外的AJAX調用(讓你的頁面更敏感)的優勢在於:

  1. 存儲在cookie中的用戶ID。
  2. 生成一個JavaScript變量存儲用戶ID:

在你的PHP文件,請執行下列操作:

<script> 
var userId = <?php echo $User['userid']; ?>; 
</script> 

這僅僅是一個值的例子。對於暴露PHP變量的JavaScript一個更好的辦法將是一個單獨的PHP文件/控制器操作是這樣的:

<?php 
session_start(); 
$myValues = array(); 
$myValues['User'] = get_user_from_session(); // just an example 
// Assemble all your values here 
header('Content-type: application/json'); 
echo "var myValues = ".json_encode($myValues); 
// or, if you go for a JSONP style init, use 
// echo "initValues(".json_encode($myValues).")"; 

然後,您可以包括與腳本的src屬性的值。但是,這將導致另一個HTTP請求。