.htaccess で特定の cookie がある場合と特定のサイトからのアクセスである場合以外は拒否する

.htaccess で特定の cookie がある場合、かつ特定のサイトからのアクセスである場合以外は拒否する方法を紹介します。

unsplash-logoJamie Street

例えば、 token という名前で foobar という値の Cookie がセットされていて、なおかつ https://example.com からのアクセスの場合だけ表示したいコンテンツがあるとします。

そういったときは .htaccess に下記のように書きます。ただし、Apache 2.4 の場合は別の書き方もできるようです。

.htaccess の書き方

SetEnvIf Cookie token=fobar mytoken
SetEnvIf Referer "^https://example\.com" mysite

SetEnvIf mytoken "^$" !mysite
SetEnvIf mysite "1" member

Order Deny,Allow
Deny from all
Allow from env=member

JavaScript で Cookie をセットする

以下のような JavaScript を、アクセス制限したいリンクのあるページに貼り付ければ良いと思います。

function setCookie (key, val, days, path) {
 var cookie = encodeURIComponent(key) + '=' + encodeURIComponent(val);
 if (days != null) {
 var expires = new Date();
 expires.setDate(expires.getDate() + days);
 cookie += ';expires=' + expires.toGMTString();
 }
 cookie += (path != null) ? '; path=' + path + ';': '; path=/;'; 
 document.cookie = cookie;
}
setCookie('token', 'foobar', 10)

以上です。

参考サイト

Published 2019-02-04
Updated 2019-06-25