如何在没有回应的情况下将会话值发送到客户端

时间:2013-11-28 02:51:30

标签: javascript php jquery

我想在我的js中使用session ['something']值,如果我不在某处打印出来,我怎么能用这个值呢?

我找到的方法只有两种 1)使用隐藏场技巧 2)ajax

注意:我有一个“巨大的”会话数据,因为它是一个数组

更新:我已经在index.php中设置了会话,我想在我的js文件中使用数组(会话)。

3 个答案:

答案 0 :(得分:1)

客户端无法直接访问任何$_SESSION变量,因此如果您不能或不想在JS中回显变量的内容,则只有两个选项可用。

答案 1 :(得分:0)

直接将其放入JavaScript中。 JSON“字符串”是完全可解析的JavaScript,这就是为什么人可以eval(jsonStr);并获得与JSON.parse(jsonStr)相同的东西(尽管出于安全原因不鼓励使用eval)。如果您的嵌套_SESSION数据是安全的(例如已经为JS清理过),那么以下内容没有任何问题:

<script type="text/javascript">
var session = <?php echo json_encode($_SESSION); ?>;
</script>

......然后...... ...

<script type="text/javascript">
$(document).ready(function() {
    doSomething(session);
}
</script>

您可能希望不将整个会话转储到客户端,在这种情况下,只需重建您想要的内容(如果您意识到这一点,也会在此处显示CDATA的示例,因为它位于XHTML树中):

<?php
$jsOut['username'] = $_SESSION['username'];
$jsOut['public'] = $_SESSION['public'];
// omit $_SESSION['passhash']
$encodedJSON = json_encode($jsOut);
?>
<script type="text/javascript">
//<![CDATA[
var session = <?php echo $encodedJSON; ?>;
//]]>
</script>

您可以将<script>标记放在HTML的正文/头部(即CDATA)中。它可以像在全局或命名空间范围内声明对象一样简单。然后通过将其传递到某个“init”函数来访问该对象(通过您用var声明它的任何名称),该函数可以在页面中包含/加载的任何JS文件中(即外部或内联)

请记住,PHP只是一个preparser(因此得名),无论你想要生成什么。在这种情况下,您将生成客户端代码,该代码可以包含HTML,CSS,甚至JS或任何其他客户端技术(例如,用于IE的VBScript)。哎呀,PHP甚至可以根据需要动态编写JavaScript,其最简单的形式就是这个解决方案的推荐。

答案 2 :(得分:0)

如果您需要在表示层中使用会话数据进行连续访问,那么您有两种方法,并且您已经提到过它们。

  1. 转储JavaScript数组中的所有数据,然后使用它。
  2. 使用AJAX并从服务器上获取它。
  3. 如果您使用的是MVC框架,则可以编写一个单独的控制器,为您提供访问SESSION数据的不同方法。这样您就不会同时公开数据并且可以编写orgazined代码。