【问题标题】:How to access a session variable in a .js file in CakePHP如何在 CakePHP 中访问 .js 文件中的会话变量
【发布时间】:2011-04-12 01:49:22
【问题描述】:

在我的CakePHP 应用程序中,我在某个控制器中创建了一个会话变量,我需要在“.js”文件中访问它。有没有办法做到这一点?

【问题讨论】:

  • 为什么呢?会话变量被设计为服务器端。
  • 同意,会话变量或任何服务器端变量不应直接在客户端代码中处理/访问。就像我在回答中所做的那样,我觉得通过它们会更好
  • strager,sandeepan:所以你是说当我在会话中保存用户名时,我不允许访问该数据客户端?
  • @dogmatic 我什么时候说你不被允许或者你不应该在客户端访问服务器端数据?你当然应该。只需将您需要的东西作为函数参数传递,以使您的客户端脚本(即 javascipt)与服务器代码(即内联服务器变量)分开

标签: javascript cakephp


【解决方案1】:

我建议将它们作为这样的参数传递 -

<a onclick="some_function('<?php echo $_SESSION['var'] ?>')">Click</a>

并让 javascript 函数 some_function() 处理它,而不是内联分配它们。这样,您就可以从服务器端代码中获得 javascript 文件。这是最干净的方式。

我也觉得因为会话变量是服务器端的,所以不应该直接用客户端语言通过内联代码来处理。

【讨论】:

  • @dogmatic 不需要功能和点击和投票?给出一些理由来支持你的观点。你明白我在回答中所解释的吗?
【解决方案2】:

您需要动态生成您的 JS 文件,以便它包含您想要的值。你可以设置你的服务器通过 PHP 解析 .js 文件,或者你可以将 JS 文件命名为 .php:

var myVar = '<?php echo addslashes($_SESSION['myVar']); ?>';

【讨论】:

  • 从编码标准的角度来看,在 js 中混合 PHP 代码好吗?如果需要服务器端值而不是这样做,那么将 js 文件分开并将参数传递给 js 函数不是更好吗?
  • @sandeepan:当然,我最初会建议一个内联脚本,但编辑我的答案只是因为 OP 提到了一个 .js 文件。
  • 当你有会话助手时直接使用 $_SESSION 并不是最佳实践。使用 php 推送资产更糟糕,它慢了一百万倍,当浏览器缓存它时会发生什么,或者你也要禁用它。
  • @dogmatic69:我对 CakePHP 不熟悉,我猜这就是你所说的会话助手。另外,我只是在回答 OP 的问题——我不建议这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多