質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

627閲覧

未ログイン同一ユーザーが一日に閲覧できる件数を制限する方法

poteto4401

総合スコア57

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/07/05 06:45

編集2021/07/05 13:06

やりたいこと

以下を満たすロジックを考えています。

  • 1日5件まで記事を閲覧可能にし、6件目以降は登録しないと閲覧不可
  • 未ログインユーザーを対象
  • 1週間経過したら制限解除(優先度低)

考えていること

  1. ブラウザのローカルストレージで状態を記録
  2. LaravelでユーザーのIPを記録

Laravel側でセッションIDを記録しようかと考えましたが、3つめの条件(1週間経過したら制限解除)を
満たすためにセッションのlifetimeを伸ばす必要があるため、却下しました。

できればサーバーサイドのみで実現したいのですが、IPで管理するのは問題ありますでしょうか?
また、他によい方法はありますでしょうか?

環境

Larval 8
Vue
Homestead
AWS

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2021/07/05 10:47

> リテラシーの高いユーザーであれば 知識の高い相手に対して如何にして対処するかではなく、どの程度・どんな条件で妥協するかを考えてそれを満たせるように作るだけです
poteto4401

2021/07/05 13:02

そうですね、たしかに能力ではかるときりがないですね。 少し修正します
Zuishin

2021/07/05 13:18

IP で特定するのはほぼ無理でしょう。 ローカルストレージで試作してみて問題があればまた方法を考えればいいんじゃないでしょうか。 問題があった場合は次のような方法を検討してみてください。 https://qiita.com/rana_kualu/items/320a4ade3e16b00adb3f
poteto4401

2021/07/06 03:39

ありがとうございます!
yuki84web

2021/07/06 12:55

Cookie削除してIP変えたら回避出来るので無理なのでは…
guest

回答1

0

ベストアンサー

サーバーサイドのみで

ユーザーが持つクッキー等の情報に依存しないという意味だとして捉えて、実装の考え方のみ回答します

比較的高い精度でユーザーを特定する技術としてブラウザーフィンガープリントと言われるものがあります
下記のサイトがとても詳しく丁寧に書かれているので詳しい説明は割愛します
https://www.saitolab.org/fp_site/

これは雑に言うとユーザーからあらゆる方法で情報を取得し、一致している情報が多ければ同一人物として扱う技術です
情報が100%一致するかどうかを判定条件とするとブラウザを変えただけで別人と判断する事になりますし、条件が緩すぎると別人でも同一人物として扱われる事になります
よってどの程度まで一致しなくても同一人物と判定するかを考えるのが重要です

フィンガープリント情報はredisで有効期限一週間のキャッシュとして保存しておきアプリ側から照合掛ければ良いんじゃないかと思います

以下、要件とは直接は関係しませんが個人的に

利用者が能動的に特定される事を容認されている状態(ログイン)だったり、一般的にこれなら特定されるだろうという情報(グローバルIP)で個人を特定するのなら悪感情を頂きませんが(暗黙の了解的な意味で)、ブラウザ変えてクッキー消しても同一人物と特定されるのは全く良い気分ではありません

なのでもし実装するならIP制限が良いかなと思います
そしてグローバルIPを共有しているタイプのモバイル系回線には諦めてもらう

投稿2021/07/07 00:23

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poteto4401

2021/07/07 03:58 編集

丁寧にご回答いただきありがとうございます!助かります! 求めていたより更に上のレベルのものを紹介していただき、本当に感謝します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問