32758


**前回アクセス日時から10分経過したかどうかで条件分岐したいのですが、下記何れが(もしくは他の方法が)良いでしょうか？**  
・それぞれメリットデメリット等あれば教えてください

**案1.IDだけをクッキー格納**  
・初回アクセス時にID発行してクッキーへ格納  
・IDとアクセス日時はDBにも格納  
・次回アクセス時にID照合して、DBの格納値と現在時刻で計算

**案2.IDとアクセス日時をクッキーへ格納**  
・初回アクセス時にID発行してクッキーへ格納  
・IDとアクセス日時をクッキーへ格納  
・IDはDBにも格納  
・次回アクセス時にID照合して、クッキーの格納値と現在時刻で計算

**Q.**  
・わざわざDBアクセスするより、クッキー使用できる場合はクッキーを使用した方が良い？  
・クッキーは拒否される恐れがある？  
・クッキー拒否された場合は(クライアントから)ID自体を取得出来ないため、IDをDB格納していたとしても無意味？  
・例えば「Web Storage」を使用すれば必ず取得できるのでしょうか？


CC BY-SA 3.0
2017-02-17T15:20:50.910
32754
2017-02-18T07:49:23.453
7886
question
php
前回アクセス日時から10分経過したかどうか知りたい場合、アクセス日時をクッキーへ格納しておく必要はある？


何がメリット・デメリットになるのかは、あなたの作成するサイトの仕様・要件(あるいは「主観」)によって変わるものなので、クッキーの持つ技術的特性と、あなたのサイトがなぜ「10分経過したかどうかで条件分岐したい」のかをよく考えて判断してください。

  1. サーバからブラウザに送信されたクッキーはブラウザ内に保持される

下の3.とも関連しますが、中身はユーザに丸バレで改ざんも超簡単です。(技術力なんてものは全く不要でブラウザの開発者機能を使うだけで小学生でも簡単に改変できます。)もちろん削除することも簡単です。

  2. ブラウザは同じサーバにリクエストを送信する際に同一サーバ用のクッキーを全部送信する

従って、クッキーを手軽なデータ保管場所として安易に多用してサイズが膨らんでいくと、ページアクセスのスピードが体感ではっきりわかるほど遅くなることもあります。例えば前回アクセス時刻なんて使用しない別ページのアクセスの際にも(同一サーバと判定される)全てのクッキーが送信されます。クッキーを全く使用しない静的リソース(画像やらCSSやら)の場合にも、毎回全てのクッキーが送信されます。

  3. サーバが参照するクッキーの値はクライアント(ブラウザ)が送信したものであり、サーバから送信した値とは限らない

極端な話、ブラウザではなく全然別のアプリがブラウザのふりをしてHTTPリクエスト中にブラウザが送信するのと全く同じ方法でクッキーを仕込んだ場合、サーバサイドではその真贋を確認する方法はありません。(電子署名なり暗号化なりはできるでしょうが、そこまでしてクッキーを使う意味は殆どないでしょう。)

* * *

と言うわけで **Q** の内容を見直してみると。

_**・わざわざDBアクセスするより、クッキー使用できる場合はクッキーを使用した方が良い？**_

まさに上記のクッキーの特性を見て判断してくださいと言うところです。ページアクセスのスピードが問題になる程クッキーの量が膨らむ恐れはなくて、ユーザが前回アクセス日時を改ざんしても何も困らない、と言う条件が成り立つならクッキーのお手軽さは魅力的な選択肢かもしれません。

_**・クッキーは拒否される恐れがある？**_  
_**・クッキー拒否された場合は(クライアントから)ID自体を取得出来ないため、IDをDB格納していたとしても無意味？**_

後者に書かれている通りです。クッキーを拒否されたら、クッキーに保存したIDで同一クライアントであることを判別することができないので、「ID」を利用する全ての処理に意味がなくなってしまいます。

_**・例えば「Web Storage」を使用すれば必ず取得できるのでしょうか？**_

Web
Storageもクッキーと同様ブラウザ側に保存されるものですから、改ざん等の恐れは常にありますし、特定のページをアクセスした時に中身を自動的に送信してくれるという機能はないので、なんらかのJavaScriptのコードをどこかに仕込んでおく必要が出てきます。クッキーでなければ何でも良いんだ、と言う意味不明の基準でない限り、あまりメリットになる状況はないように思います。


CC BY-SA 3.0
2017-02-18T00:18:49.020
32758
2017-02-18T00:18:49.020
2020-06-17T08:14:45.997
-1
13972
32754
answer


クッキーは改ざんされる恐れがあるので、  
案2の場合、10:00にアクセスして、クッキーの値のアクセス日時を9:50とかにすると、  
10分経ってないのに10分経ったことになってしまったりします。

案1にすると、アクセス日時の改ざんはできなくなります。  
でも、10:00にアクセスして、10分経ってからクッキーを削除してアクセスされると、  
10分経ったのに10分経ってないことになります。

クッキー削除は対処しようがないですが、  
アクセス日時改ざんを防ぐために、  
案1にするか、  
クッキーを改ざんされないように、  
ID、アクセス日時を暗号化したうえでクッキーに保存  
が良いと思います。


CC BY-SA 3.0
2017-02-18T07:49:23.453
32768
2017-02-18T07:49:23.453
19991
32754
answer