【问题标题】:Read session value with Javascript使用 Javascript 读取会话值
【发布时间】:2010-10-19 18:41:29
【问题描述】:

是否可以使用 Javascript 读取会话值?

例如,如果我在 PHP 中为会话赋值:

$_SESSION['msg'] = "ABC Message";

是否可以使用 Javascript 读取 $_SESSION['msg']

【问题讨论】:

    标签: php javascript session


    【解决方案1】:

    一种非常简单的方法是使用一些 PHP 代码生成 JavaScript:

    <script type="text/javascript">
        <?php echo 'var msg = "'.json_encode($_SESSION['msg']).'";';
    </script>
    

    【讨论】:

    • 如果 $_SESSION['msg'] 存储敏感信息,输出到未加密页面存在安全风险,应使用 HTTPS。
    • 但是这样做可以直接公开值,并且可以从控制台访问它并且可以对其进行修改。如果您需要获取诸如 privilege_type id 之类的合理信息并且您不希望您的用户能够更改它怎么办:您需要在运行时从私有方法访问此类值,并且永远不要存储它以供以后使用。
    • 如果它被缓存,那么你会看到你的世界被烧毁。这就是为什么我更喜欢接受答案的cookie方法。
    • 哇。有一个很好的答案和两个很好的建设性观点。我基于这个特定答案和这些 cmets 的问题是,如果我只想检查用户是否真的登录了怎么办?只是在此回复中显示的 JSON 中返回的快速真或假检查,关于已在仅用 PHP 编写的不同页面中发生的成功登录?然后就好了?
    【解决方案2】:

    $_SESSION 是一个服务器端结构。您需要将该变量存储在 $_COOKIE 中才能在客户端访问它。

    【讨论】:

    • 为什么要投票? harto 的解决方案证明它是不正确的。
    • 同意,但它没有回答问题,实际上是在提供误导性信息。
    • 这有什么误导性?您无法使用 javascript 读取会话变量。您要么必须将值填充到 javascript 可以访问的 cookie 中,要么将其呈现给页面本身。这不是很安全。
    • Cookie 不再安全,它们在大多数浏览器中都很容易看到。
    • 对。不应该提到安全性。我的观点是 $_SESSION 不是客户端构造。将值存储在客户端构造中($_COOKIE,在 HTML 中呈现),或者向服务发出 AJAX 请求,该服务将从您的服务器端会话返回该值。
    【解决方案3】:

    .. 或者您可以使用 ajax 将您的服务器端会话值检索到您的客户端 javascript。` (快速、肮脏和未经测试的示例,使用jQuery

    Javascript 端:

    $.ajax({
          url: "test.php",
          cache: false,
          success: function(html){
            eval( html ); /// UGLY NASTY YOU MUST VALIDATE YOUR INPUTS... JUST AN EXAMPLE
          }
        });
    

    PHP端test.php:

    echo 'var myData = "'. $_SESSION['msg'].'"';
    

    【讨论】:

      【解决方案4】:

      如果这对任何人有帮助,这些示例返回 null,所以我只是使用:

      <?php session_start();
         $msg = $_SESSION['msg'];
      ?>
      
      <script>
         <?php echo "var msg = '" .$msg . "'"; ?>
      </script>
      

      【讨论】:

      • 没有真正回答问题
      • 我看到你 -1 了我。问题是“是否可以使用 Javascript 读取 $_SESSION['msg']?”我的答案使用 javascript 来访问 php 变量,以防万一帮助任何人。您的评论是我的回答没有解决问题。你错了。
      • 再次阅读您的答案。问题是是否可以读取会话变量。答案是“否”,但在某些情况下有一个有用的解决方法。你没有这么说。还有一些代码格式会很好。 var msg = '';看起来比在 php 中加入整个 javascript 行要好得多。对不起,但这看起来不像问题的答案。尝试改进它。
      【解决方案5】:
      <script type="text/javascript">
      var foo="<?php echo $_SESSION['user_id']; ?>";
      alert(foo);
      </script>
      

      【讨论】:

      • 警报信息返回 。有什么想法吗?
      【解决方案6】:

      为了让 Luis Melgratti 的回答更简单,您可以从 PHP 返回一个 json 编码值并使用 jQuery 对其进行解析,如下所示:

      Javascript:

      $("#some_button")
          .click(function()
          {
              $.ajax(
              {
                  url: "get_session.php",
                  cache: false
              })
              .done(function(result)
              {
                  var session_credentials = $.parseJSON(result);
                  console.log(session_credentials);
              });
          });
      

      PHP:

      //get_session.php
      <?php
          session_start();
          echo json_encode($_SESSION);
      ?>
      

      我相信在类似的 SO-thread 上还有更多答案:how-to-access-php-session-variables-from-jquery-function-in-a-js-file

      【讨论】:

        【解决方案7】:

        愿它起作用:

        function getCookie(name) {
          var value = "; " + document.cookie;
          var parts = value.split("; " + name + "=");
          if (parts.length == 2) return parts.pop().split(";").shift();
        }
        
        getCookie('PHPSESSID');
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-25
          • 1970-01-01
          • 2016-05-26
          • 2013-07-16
          • 1970-01-01
          • 1970-01-01
          • 2012-08-09
          • 2013-08-03
          相关资源
          最近更新 更多