【问题标题】:javascript sessionStorage doesn't get element, set in PHPjavascript sessionStorage 没有获取元素,在 PHP 中设置
【发布时间】:2021-09-05 02:46:44
【问题描述】:

表单中有一个 PHP 值,我已将其设置为会话。在我的 javascript 代码中,我希望能够访问此值,但它不起作用。

    'use strict';
    let numOfPlayers = Number(sessionStorage.getItem('numOfPlayers'));//This returns 0
    alert(numOfPlayers);
    <?php
      session_start();
    ?>
    <!DOCTYPE html>
    <?php
      if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $numOfPlayers = $_POST['numOfPlayers'];
        $_SESSION['numOfPlayers'] = $numOfPlayers;//It works until here
      }
    ?>
    <html>
    <body>
      <!--Code-->
      <script src="Script.js"></script>
    </body>
    </html>

【问题讨论】:

  • PHP $_SESSION 与浏览器 sessionStorage 无关——它们唯一的共同点就是 session 这个词
  • sessionStorage != $_SESSION。我认为你把你的概念/工具搞混了。
  • @JaromandaX 刚才说的,浏览器的 sessionStorage 和 PHP 的 session 是两个不同的东西。您必须共享所需的信息(通过 PHP 打印 js 脚本块、js 可读 cookie 等)。

标签: javascript php


【解决方案1】:

欢迎来到 SO!正如其他一些答案已经说明的那样,可通过JavaScript 和其他客户端脚本语言访问的浏览器sessionStorage 与服务器端可访问的PHP $_SESSION 存储不同。 When should I use PHP Session vs Browser Local Storage vs JavaScript Object Parameters?

但是,这里有一个示例,它将采用$_SESSION['numOfPlayers'];PHP 会话变量值并将其设置为JavaScript 变量numOfPlayersPHPSession,然后可以将其设置到客户端会话存储中(这不会'由于会话/本地存储通常被锁定,因此无法在 SO 或大多数在线工具上工作,但假设适当的权限/配置,您应该能够在本地进行测试。

此外,这是一个松散的示例,因此在将 PHP 值呈现为要在客户端脚本等中使用的 JS 变量时,您仍然需要确保并遵循最佳安全实践。

<?php
  session_start();
?>
<!DOCTYPE html>
<?php
  if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Use null coalesce to make sure we set a value / 0 if no players
    $numOfPlayers = $_POST['numOfPlayers'] ?? 0;
    $_SESSION['numOfPlayers'] = $numOfPlayers; //It works until here
  }
?>
<html>
    <body>
        <!--Code-->
        <!--<script src="Script.js"></script>-->
        <script type="text/javascript">
            // In place of calling Script.js, embedding code here for example
            let numOfPlayersPHPSession = <?php echo $_SESSION['numOfPlayers']; ?>;
            sessionStorage.setItem('numOfPlayers', numOfPlayersPHPSession);
            let numOfPlayers = Number(sessionStorage.getItem('numOfPlayers'));
            // alert(numOfPlayers); or console.log(numOfPlayers);
        </script>
    </body>
</html>

如果您转到以下链接中的示例并单击“执行代码”(由于沙盒限制,其中的一些 $_SESSION / $_POST 逻辑被注释掉了),您将看到 @987654339 的值@ 设置在来自 PHP 会话值的 JS 变量上,然后可以将其设置为 sessionStoragehttp://sandbox.onlinephpfunctions.com/code/285dbdec5446316c712dd49f895039eec8c4c915

另外需要注意的是,如果使用客户端 sessionStorage,您可能需要在 JS 逻辑中添加额外的检查,以确保浏览器窗口/应用程序支持具有本地/会话存储的 I/O,如下所述:@ 987654324@

【讨论】:

    【解决方案2】:

    sessionStorage 使用客户端存储,PHP $_SESSION 存储在服务器端。
    您可以访问此值以向服务器发送 AJAX 请求以从服务器端获取会话值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-14
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多