如何在 JavaScript 中访问会话


How access session in JavaScript?

我在CakePHP中创建了这样的会话:

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

现在我想使用 JavaScript/jQuery 在会话中检查userid

是否有任何直接方法可以在 JavaScript 中访问此会话。

谢谢

是否有任何直接方法直接在 JavaScript 中访问此会话。

不。会话数据存储在服务器上。

为了访问它,你需要通过PHP在URI上公开它,然后向该URI发出HTTP请求(可能使用Ajax)。

// 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();

为什么要在客户端上检查用户ID,在那里它可以被伪造,操纵等?只需使用会话 ID。

除此之外,还有两种简单和额外的方法可以将用户 ID 公开给 JavaScript。两者都具有不需要额外的 AJAX 调用(使您的页面响应速度更快)的优点:

  1. 将用户 ID 存储在 Cookie 中。
  2. 生成一个存储用户 id 的 JavaScript 变量:

在 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 请求。