jQueryからAjax経由でPHPにリクエストしCookieを操作する方法
先日PHPでCookie保存時にHttpOnly / Secure属性を設定する方法をメモしたが、HttpOnly属性が設定されていると当然JavaScript / jQueryから当該Cookieは取り扱えない。ただ、Ajax経由でPHPにリクエストすれば取り扱えそう。以下にソースコードをメモ。
ソースコード
Ajax側
Ajax経由でPHPにリクエストしCookieのon / offを#result部分に反映するという内容になる。
<div id="result"> <?php if( isset($_COOKIE['test_cookie']) ){ ?> on <?php }else{ ?> off <?php } ?> </div> <button id="cookie_btn">cookie btn</button> <script type="text/javascript" src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <script> $(function(){ $(`#cookie_btn`).on(`click`, function(){ $.ajax({ url:'./set_cookie.php', type: 'POST', }).done(function(result){ if( result == 0 ){ $(`#result`).text(`off`); }else if( result == 1 ){ $(`#result`).text(`on`); }else{ alert('エラーが発生しました。'); } }).fail(function() { alert('エラーが発生しました。'); }).always(function() { }); }); }); </script>
受け取り側
エラーチェック等は入っていない点に注意。
<?php if( isset($_COOKIE['test_cookie']) ){ $cookie_options = array( 'expires' => time() - 3600, 'path' => '/', ); setcookie('test_cookie', '', $cookie_options); $return = 0; }else{ $cookie_options = array( 'expires' => time() + 3600, 'path' => '/', 'domain' => '', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' ); setcookie('test_cookie', true, $cookie_options); $return = 1; } echo $return;
所感
Ajax部分のソースコードが増えるのでやや面倒なものの、これでJavaScript / jQueryからもCookieを取り扱えそう。
関連記事
-
-
jQueryでチェックボックスの全チェック&チェック解除する方法
フォームのチェックボックスで「全てにチェックを入れる」「全てのチェックを外す」と ...
-
-
jQuery UI Datepickerで日本の祝祭日を表示
やりたかった事は、jQueryのカレンダーピッカーで 日本の祝祭日の色を変えると ...
-
-
jQueryのloadメソッドでファイル(ページ)を呼び出す
サイト内でヘッダーやフッター等共通のパーツはそれぞれ別ファイルに分けてPHPのi ...
-
-
FormDataを使ったAjax通信がiPhoneのみエラー
FormDataオブジェクトを使用したAjax通信するシステムがあり、PCやAn ...
-
-
formのtextareaに文字を入力した内容をリアルタイムプレビューする方法
textarea内に書いた内容をリアルタイムでプレビューする機能が必要になった。 ...