我想在js中使用session['something']值,如果我不把它打印出来怎么办,我怎么能使用这个值呢?
我只找到了两种方法1) 使用隐藏字段技巧2) ajax
注意:我有一个"巨大"的会话数据,因为它是一个数组
更新:我已经在index.php中设置了会话,我想在js文件中使用数组(会话)
客户端不可能直接访问任何$_SESSION
变量,因此如果您不能或不想在JS中回显变量的内容,则只有两个选项可用。
将其直接放入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)。它可以简单到在全局范围或命名空间范围中声明一个对象。然后只需访问中的对象(无论您用var
声明它的名称是什么),将它传递到一些"init"函数中,该函数可以位于页面中包含/加载的任何JS文件中(即外部或内联)。
记住,PHP只是您想要生成的任何内容的准备程序(因此得名)。在这种情况下,您生成的客户端代码可以由HTML、CSS、甚至JS或任何其他客户端技术(例如IE的VBScript)组成。见鬼,如果你愿意,PHP甚至可以动态地编写JavaScript,这是这个解决方案推荐的最简单的形式。
如果您需要表示层中的会话数据进行连续访问,那么您有两个方法,并且您已经提到了它们。
- 将所有数据转储到JavaScript数组中,然后使用它
- 使用AJAX并从服务器获取它
如果您使用的是MVC框架,您可以编写一个单独的控制器,它为您提供访问SESSION
数据的不同方法。这样你就不会一次公开所有的数据,并且可以编写组织代码。