勉強したことのメモ

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.lazyload.js」の利用方法

画像を遅延ロードさせたい時にはjQueryプラグインのlazyloadが便利。以 ...

JSやjQueryで動的に追加した要素に対して「slick」でスライダーを実行する方法

外部サーバからAjax等で画像URLを取得したものをimgタグとしてページ内に描 ...

jQuery Nice Selectを特定ページのみ無効にする方法

bootstrap系のテンプレートデザインを使用したサイトを構築中に、セレクトメ ...

tableのフィルター機能

jQueryのプラグインで簡単にフィルター機能が つけられたのでメモ。 ■必要な ...

DateTimePickerで特定日にClassを付与&選択不可にする方法

jQueryプラグインのDateTimePikerで特定の日にClassを付与し ...