我想在我的js中使用session ['something']值,如果我不在某处打印出来,我怎么能用这个值呢?
我找到的方法只有两种 1)使用隐藏场技巧 2)ajax
注意:我有一个“巨大的”会话数据,因为它是一个数组
更新:我已经在index.php中设置了会话,我想在我的js文件中使用数组(会话)。
答案 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)
如果您需要在表示层中使用会话数据进行连续访问,那么您有两种方法,并且您已经提到过它们。
如果您使用的是MVC框架,则可以编写一个单独的控制器,为您提供访问SESSION
数据的不同方法。这样您就不会同时公开数据并且可以编写orgazined代码。