1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-31

##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){
	処理
}
1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?