Javascriptでcookieを使って閲覧履歴を実装


Javascriptでcookieを使って閲覧履歴を実装

wordpress案件でcookieを使って閲覧履歴を実装しました。
遠回りをしてしまったのですが、最終的には配列を文字列化して対応しました。
そのメモです。

閲覧履歴:recent_view
1,クッキーrecent_viewの存在をチェック(indexOf)
2,なければ、配列recent_viewをつくって記事IDをいれる
3,あれば、配列にする(split)
4,重複チェック(indexOf)
5,重複してたら、それを削除(splice)
6,配列の先頭に記事IDを入れる(unshit)
7,配列recent_viewを文字列化(join)
8,クッキーrecent_viewに文字列を入れる

var allCookie = document.cookie;

$(function(){
    /* 閲覧履歴:recent_view */
    if (allcookie.indexOf('recent_view') == -1) { 
        var recent_view = [];
        recent_view.unshift('<?=get_post()->ID?>');

    } else { 
        var str = allcookie.replace(/(?:(?:^|.*;\s*)recent_view\s*\=\s*([^;]*).*$)|^.*$/, "$1");
        recent_view = str.split(',');

        var num = recent_view.indexOf('<?=get_post()->ID?>');
        if (num != -1) {
            recent_view.splice(num, 1);
        }
        recent_view.unshift('<?=get_post()->ID?>');
    }

    recent_view_str = recent_view.join(',');
    document.cookie = 'recent_view='+recent_view_str+';path=/';
    console.log(document.cookie);
});

あとは、phpの$_COOKIEで値を取得して配列に戻してループで利用します。

$recent_view = explode(',', $_COOKIE['recent_view']);
$recent_view = array_map('htmlspecialchars', $recent_view);
foreach($recent_view as $val){
    処理
}