勉強したことのメモ

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

  関連記事

jQueryでチェックボックスの全チェック&チェック解除する方法
jQueryでチェックボックスの全チェック&チェック解除する方法

フォームのチェックボックスで「全てにチェックを入れる」「全てのチェックを外す」と ...

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

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

JavaScript / jQueryにてページ表示時に指定したテキストボックスにフォーカスさせる方法
JavaScript / jQueryにてページ表示時に指定したテキストボックスにフォーカスさせる方法

ページを開いた際に指定したテキストボックス(input type="text") ...

jQueryで指定した要素を簡単にフォーカスするfocusbleの使い方
jQueryで指定した要素を簡単にフォーカスするfocusbleの使い方

divやspanなど指定した要素を簡単にフォーカスするjQueryプラグインがあ ...

jQueryで偶数or奇数行に任意のClassを付与する方法
jQueryで偶数or奇数行に任意のClassを付与する方法

tableタグの1行目を除く偶数もしくは奇数行のtrタグに任意にClassを指定 ...