【问题标题】:Access session variables from JavaScript从 JavaScript 访问会话变量
【发布时间】:2011-12-29 20:39:28
【问题描述】:

是否可以访问由 JavaScript 生成的会话变量,以及如何在 JavaScript 中复制此 PHP 代码?

if(empty($_SESSION['name'] {
   echo 'foo';
}

【问题讨论】:

  • 使用会话变量的要点是它们对客户端不可见...
  • 有点可惜,能访问它们有什么缺点吗??
  • 如果可以从浏览器中任意检查他们的会话变量,那么如果存在真正应该隐藏而不是“foo”的数据,则可能会出现一些问题。

标签: php javascript session variables


【解决方案1】:

你可以通过 Ajax 访问一个返回变量值的页面:

使用 jQuery:

$.get('myVariable.php', function ( data ) {
    alert(data)
});

还有PHP页面(myVariable.php):

<?php echo $_SESSION['user_id']; ?>

【讨论】:

    【解决方案2】:

    如果您将 javascript 设置为由 php 解析,则可以像在 php 中一样访问会话变量:

    // Test.php
    <?php session_start(); ?>
    
    <?php $_SESSION['foo'] = 'bar' ?>
    
    <script type="text/javascript">
        alert('<?php echo $_SESSION['foo'] ?>');
    </scrip>
    
    <?php var_dump($_SESSION['foo']) ?>
    

    【讨论】:

      【解决方案3】:

      对不起,你不能:(

      先来一点背景:

      PHP 中的会话支持包括一种在后续访问中保留某些数据的方法。这使您能够构建更多定制的应用程序并增加您网站的吸引力。

      访问您网站的访问者被分配一个唯一的 ID,即所谓的会话 ID。这要么存储在用户端的 cookie 中,要么在 URL 中传播。

      会话支持允许您注册任意数量的变量以跨请求保留。当访问者访问您的站点时,PHP 将自动检查(如果 session.auto_start 设置为 1)或根据您的请求(显式通过 session_start() 或隐式通过 session_register())检查是否已随请求发送了特定会话 ID。如果是这种情况,则重新创建先前保存的环境。 来自http://www.php.net/manual/en/intro.session.php

      基本上,会话涉及在服务器端存储数据并将 ID 存储在 cookie 客户端。这意味着 JS 理论上可以访问 cookie,但是您将只能访问 PHPSESSID 变量(会话 ID)。

      要实现您想要做的事情,您可以使用 ajax。 (与流行的误解相反)ajax 请求仍然为服务器提供访问 cookie 和会话所需的所有信息。

      所以只需制作一个像getName.php 这样的服务器端脚本,其中包含:

      if(!empty($_SESSION['name'])) {
          echo $_SESSION['name'];
      }
      

      并使用 ajax 获取响应 :)

      【讨论】:

      • 或者按照 Digital Precision 的说法跳过 AJAX。
      【解决方案4】:

      嗯...... ajax 很好,一切都很好,但如果你真的想要,你可以将它们作为变量打印在头部的标签中,然后通过 js 访问它们。我从来没有用会话变量这样做过,但我一直以这种方式从 php (mysql) 中打印出值

      【讨论】:

      • 我不会将它用于任何类型的安全/私人数据。客户端不能直接访问会话变量,但是如果您将它们发送到 javascript,然后使用那里的逻辑来验证人,您可能会遇到问题。 “伪造” javascript 变量非常容易,因此您不能指望它们 100% 准确
      【解决方案5】:

      是否可以从 javascript 访问 php 中的会话变量

      没有。它们驻留在您的 Web 服务器的内存中,幸运的是,javascript 无法访问。

      【讨论】:

        【解决方案6】:

        会话变量存储在服务器上。使用 javascript(客户端)访问它们的唯一方法是使用 AJAX 向后端发出请求到 php 页面,然后将值返回给您。

        【讨论】:

          【解决方案7】:

          不,你不能。会话变量存储在服务器中,而不是客户端中。您可以做的最接近的事情是在 php 脚本中验证会话变量并使用 ajax 调用它。

          【讨论】:

            猜你喜欢
            • 2011-11-25
            • 1970-01-01
            • 2018-05-11
            • 1970-01-01
            • 1970-01-01
            • 2011-10-23
            • 1970-01-01
            • 2015-07-21
            • 1970-01-01
            相关资源
            最近更新 更多