繁体   English   中英

如何在不回显的情况下获取会话值到客户端

[英]how to get session value to client-side without echo it out

我想在我的js中使用session ['something']值,如果我不将其打印出来怎么办,我该如何使用该值?

我发现的只有2种方法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>

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

记住,PHP只是您要生成的任何内容的预准备器(因此而得名)。 在这种情况下,您将生成由HTML,CSS,甚至JS或任何其他客户端技术(例如IE的VBScript)组成的客户端代码。 哎呀,PHP甚至可以根据需要动态编写JavaScript,这是此解决方案所建议的最简单形式。

如果您需要表示层中的会话数据以进行连续访问,则有两种方法,并且已经提到过。

  1. 将所有数据转储到JavaScript数组中,然后使用它。
  2. 使用AJAX并从服务器中获取。

如果使用的是MVC框架,则可以编写一个单独的控制器,该控制器为您提供用于访问SESSION数据的不同方法。 这样,您将不会一次公开所有数据,而是可以编写组织了代码的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM