勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

jQueryからAjax経由でPHPにリクエストしCookieを操作する方法

  PHP jQuery JavaScript

先日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を取り扱えそう。

 - PHP jQuery JavaScript

  関連記事

videoタグで表示させた動画をjQuery&CSSでフローティングビデオ対応させる方法

Web上の動画をFloatingVideo対応したいという要望を受けた。ページ上 ...

jquery.cookie.jsで保存期間を時間指定する方法

jquery.cookie.jsで保存期間を1時間等、時間指定したい。公式サイト ...

国土地理院のAPIを使用して無料でジオコーディング(住所→経度緯度)を行う方法

GoogleMapAPIでジオコーディングをするには、支払い情報を登録したアカウ ...

jQueryの「DateTimePicker」プラグインで日付や時間選択時に指定したイベントを実行させる方法

jQueryの「DateTimePicker」プラグインで日付や時間選択時、あら ...

jQueryとCSSで指定したテキストに対してラインマーカーを引く方法

サイト内で強調したいテキストに対して蛍光ペンでマーカーを引くようなアニメーション ...