【问题标题】:How to connect between the sessionStorage in PHP to JS如何在 PHP 中的 sessionStorage 和 JS 之间连接
【发布时间】:2017-07-20 09:53:51
【问题描述】:

我正在尝试在我的 PHP (html) 页面中传输数据,在加载 HTML 之前,所以我将能够在页面加载到我的 JS 文件后处理它。 我的 php 看起来像这样:

<?php
/*some php code*/
$dataFromDataBase = "..";
session_start();
$_SESSION['data'] = $dataFromDataBase;

if(isset($_SESSION['data']))
    echo $_SESSION['data'];
else
    echo "<br>False";       
?>
<html>
<!--My Html code..-->
</html>

现在有“if”条件来检查会话是否是在 php.ini 中创建的。 现在它回显了我的数据,所以它的会话存在。 我的 JS 是这样的:

if(sessionStorage.getItem("data")){
//do some thing..
}else{
alert("the data isn't set.");
}

并且数据不存在......我已经尝试提醒数据,它向我发送“null”...... 他们让我像这样直接输出到 JS:

<script>
var fromserver="<?php
/*some code.. */
echo "**BIG DATA**";
?>";

但这只是不整洁的代码..而且数据很大,所以我不能使用 coockies

【问题讨论】:

  • 顺便说一句,如果有任何更改,我将在同一个 JS 文件中使用 Jquery..
  • $_SESSIONsessionStorage 非常不同,尽管名称相似,但它们并不相同。
  • $_SESSION 存在于服务器上,而sessionStorage 存在于客户端上。它们非常独立,无法直接通信。要从$_SESSION 获取某些内容到您的 JS 代码中,您最好发出 AJAX 请求来检索它
  • 是的,或者使用 PHP 在您的网页上回显 $_SESSION 变量?您可以回显“
  • 为什么不使用ajax来回传递变量?

标签: javascript php jquery html


【解决方案1】:

$_SESSIONsessionStorage 完全不同。

sessionStorage 保存类似于$_SESSION 的数据,但在客户端设置了 sessionStorage 变量。 $_SESSION 就像 sessionStorage 所以我明白你的误解,但是,这会在服务器端设置数据并且不会交叉到 sessionStorage

如果您确实需要sessionStorage 中的$_SESSION 数据,您可以回显一个脚本,将sessionStorage 设置为您的$_SESSION 数据。下面是一个非常简单的示例。

<?php session_start;

$_SESSION['data'] = "yourdata";

echo '<script> sessionStorage.setItem("data", "' . $_SESSION['data'] . '");</script>';

//Display 'data'.
echo '<script> alert(sessionStorage.getItem("data")); </script>';

编辑:为了更清楚,请注意$_SESSION 在 PHP(服务器端)中是如何完成的,sessionStorage 必须在 JavaScript 中使用&lt;script&gt; 标签设置。以下是您的问题的解决方案。

<?php
/*some php code*/
$dataFromDataBase = "..";
session_start();
$_SESSION['data'] = $dataFromDataBase;

if(isset($_SESSION['data']))
{
   echo '<script> sessionStorage.setItem("data", "' .$_SESSION['data'] .'");</script>';
}
else
{
    echo "<br>False";   
}    
?>
<html>
<!--My Html code..-->
</html>

【讨论】:

    【解决方案2】:

    从用户提供的数据创建可执行的 JS 代码是一个主要的安全问题,所以你应该避免像var someJsVar = '&lt;?= $somePhpVar;?&gt;;' 这样的语句。注入恶意代码可能很简单,比如'; malicious-code-here //

    https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) https://www.owasp.org/index.php/XSS_Attacks

    让您的页面在页面加载时进行 API 调用会更安全,这会返回编码为 JSON 的 sessionStorage 数据。这样浏览器将看到一个包含用户数据的变量,而不是原始数据本身。

    #Initial page
    <body>
        <script>
             $.GET("/session-storage.php").success(function(response){
                 sessionStorage.setItem("data", response);
             });
        </script>
    </body>
    
    
    #API Call (session-storage.php)
    <?php
        $dataFromDataBase = "..";
    
        echo json_encode($dataFromDataBase);
    ?>
    

    【讨论】:

    • 问题在于它需要很长时间..因为首先页面会被加载,然后js才会将调用发送到php文件
    • 性能差异可以忽略不计,安全性提升值得。
    • 另外,如果您返回"**BIG DATA**",则用户在页面加载时将只是坐在白色屏幕上。如果您加载初始页面,他们将获得更好的体验,然后显示一个微调器或消息,让他们知道他们的数据正在加载。
    【解决方案3】:

    您可以从 php 变量中获取数据并在 JS 中使用它.. 像这样

    var sessionData = <?php echo $_SESSION['data'];?>
    if (typeof sessionData != "undefined" && sessionData == null){
    //do some thing..
    }else{
    alert("the data isn't set.");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-12
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2013-06-10
      • 1970-01-01
      • 2021-11-17
      相关资源
      最近更新 更多