2017-07-20 39 views
-1

私のPHP(html)ページでデータを転送しようとしています.HTMLが読み込まれているので、ページがJSに読み込まれた後に処理できますファイル。 私のPHPは次のよ​​うになります。PHPのsessionStorageとJSとの接続方法

<?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> 

条件がセッションは、PHPで作成されたかどうかを確認するために、今そこにある「場合」。 これはデータをエコーし​​ているので、セッションが存在していません。 私のJSは、そのようになります。

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

、データが存在していない...私はデータを警告するtrideてきた、そしてそれは私に「ヌル」を送る。.. 彼らはJSへの出力に私を提供

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

が、それは...ただだらしないコードであり、データはので、私はあなたがPHPの変数からデータを取得し、JSでそれを使用することができますcoockies

+0

... – user5460170

+2

'$ _SESSION'が、彼らは同じではありません似た名前にもかかわらず、' sessionStorage'とは非常に異なっています。 – Maerlyn

+0

'$ _SESSION'はサーバー上に存在し、' sessionStorage'はクライアント上にあります。彼らは非常に離れており、直接コミュニケーションをとることはできません。 '$ _SESSION'からJSコードに何かを取得するには、AJAXリクエストを取得して –

答えて

0

を使用することはできませんかなり大きいです..:直接そのようなこのように

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

$_SESSIONおよびsessionStorageは全く異なる。

sessionStorageは、クライアントの側でsessionStorage変数が設定されている点を除いて、$_SESSIONのようなデータを保存します。 $_SESSIONsessionStorageと似ていますが、誤解されていますが、これはサーバ側のデータを設定し、sessionStorageには渡りません。

あなたが本当にsessionStorage$_SESSIONのデータは、あなたがあなたの$_SESSIONデータにsessionStorageを設定するスクリプトをエコーすることができていることが必要な場合。以下に、非常に簡単な例を示します。

<?php session_start; 

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

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

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

EDIT:それをより明確にするために、PHP(サーバー側)で行われ、sessionStorage<script>タグとJavaScriptで設定する必要がありますする方法$_SESSION気づきます。以下はあなたの問題に対する解決策です。あなたはvar someJsVar = '<?= $somePhpVar;?>;'のようなステートメントを避ける必要がありますので、ユーザ提供されたデータから

<?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> 
0

の作成、実行可能JSコードは、主要なセキュリティ上の問題です。悪意のあるコードを注入すると、あなたのページはJSONとしてエンコードsessionStorageのためにあなたのデータを返すことになる、ページのロードにAPI呼び出しを行う持っているより安全だろう'; malicious-code-here //

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

としてシンプルである可能性があります。このようにして、ブラウザーには、ユーザーデータを含む変数が表示され、生データ自体は表示されません。それは任意の変更を行う場合、私は同じJSファイル内のjQueryをuseingてる方法によって

#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); 
?> 
+0

問題はそれは多くの時間がかかる...最初にページがロードされ、その後だけjsはPHPファイルへの呼び出しを送信します – user5460170

+0

パフォーマンスの差はごくわずかですし、セキュリティの向上がそれを価値にします – Josh

+0

また、 ** BIG DATA ** "を返すと、ユーザーはページが読み込まれている間に白い画面に座っているだけです。最初のページを読み込んでスピナーやメッセージを表示した方が良いでしょう彼らのデータがロードされていることを知らせます。 – Josh