JSとPHPについて、セッションの種類と連携方法について教えて頂きたく思います。
どうぞよろしくお願い致します。
###実現したいこと
「後で読む」という記事IDをAjaxで更新しています。
体感速度を上げるため、サーバーデータでなくセッションデータを活用したいです。
つまり「Ajaxの通信結果を待たずUIを変更し、サーバーデータの前にセッションデータを更新して、サーバーデータの更新時間を感じさせない」というアレを実現したいです。
###発生している問題
現状としましては、ユーザーが「後で読む」に登録した記事IDを、'later_ids'
として取得しています。
↓「index.php」
PHP
1<?php 2$_SESSION['later_ids'] = array('1','2'); // ユーザーの「後で読む」を取得 3?>
しかし下記JSのように「後で読むに追加するボタン(button#add
)」をクリックしても、上の'later_ids'
は更新されないという点で躓きました。
↓「submit.js」
JS
1$(document).on('click','button#add', function(){ 2 3 // セッションデータの更新→更新されない 4 const id = $(this).val(); 5 const ss = window.sessionStorage.getItem(['later_ids']).split(","); 6 ss.push(id); 7 window.sessionStorage.setItem('later_ids', ss); 8 9 // サーバーデータの更新 10 $.ajax({ 11 beforeSend: function(xhr) { 12 }, 13 success: function(result){ 14 }, 15 error: function(){ 16 }, 17 }); 18 19});
よく考えたら'later_ids'
はサーバー側のデータなのでJSで更新できないのは当たり前かと思いますが、
では、どうすれば、実現したいことは可能になるのでしょうか?通常ではどのようにしていますか?
###試したこと
「PHPの$_SESSION['later_ids']
」と、「JSのconst ss
で取得した'later_ids'
」は別なのか?と思い、それならJS側だけを更新しようと考えました。
下記のようにまずサーバー側のデータをブラウザ側に落と込みまして、これならば、上の「submit.js」でもブラウザ側のデータだけは更新できるようになりました。
↓「index.php」
PHP
1<?php 2$_SESSION['later_ids'] = array('1','2'); // ユーザーの「後で読む」を取得 3?> 4<head> 5 <script> 6 // JSに落とし込む 7 window.sessionStorage.setItem( ['later_ids'], [<?= $_SESSION['later_ids']; ?>] ); 8 </script> 9</head>
しかし疑問がございまして、これではユーザー側にIDが見えてしまったり、IDを改ざんできてしまったりしますよね?
何か…違うような気がしています。
このあたり、セッションを使ったアプリケーションはどのように素早い処理を実現しているのでしょうか?
あなたの回答
tips
プレビュー