勉強したことのメモ

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

  関連記事

adblock(広告削除)設定している場合はページを表示させない

iPhoneのSleipnirでネットをしていると「広告がブロックされたのでペー ...

画像アップロード前の時点で画像が選択されているか確認

やりたかった事は、フォーム内で画像をアップロードする際、 ちゃんと画像がローカル ...

「display: block !important;」指定された要素をjQueryで非表示にする方法

jQueryで特定の要素を非表示にしたかったのでhide()を使用したところ非表 ...

サムネイルをクリックすると拡大画像を表示できる「Lightbox」の利用方法

画像をサムネイル表示してクリックしたら大きく表示する というのがLightbox ...

jQueryプラグインでクリップボードにコピーする方法(clipboard.js)

ページ上のボタンをクリックすることで特定の文章をクリップボードにコピーしたかった ...