現状
WEBサイトにて、簡易的にログイン機能を持たすためにベーシック認証を利用しており、その際に1分以上無操作だった場合は、再度ベーシック認証の処理が走るようcookieを利用しタイムアウト機能を実装しております。
しかしそちらの処理を行うと、2回連続でベーシック認証の処理が走ることがあり入力が手間になってしまう(特にスマホだと)ので、そちらを改善したいと思っております。
確認できていること
PC Chrome →最初の1回目のみ2回認証があり、その後は1分無操作だった場合は再度認証(こちらは想定している動きとなります)
PC Chrome(シークレットモード)→必ず初回2回認証処理が走るので、初回アクセス時は2回認証が起こってしまうということは理解いたしました。
iPhone Chromeとsafari両方 → 最初の1回目は2回認証があり、その後少時間は1分無操作だった場合のみ再度認証が1回だけ起こる。(ここまでは想定している動きとなります)しかし半日程度過ぎた頃にアクセスすると再度2回認証が起こってしまう。
httpからhttpsのリダイレクトは行っているので、そちらのせいで2回処理が行われているかと思ったのですが、httpで初回アクセスすると3回認証が起こるので、リダイレクトの影響とは別で2回処理が動いているかと思います。
ソースコード
参考サイト:https://blog.aleajactaest.org/article_4yexqaxepfclfptpmwjjxiluvm.html
上記サイトを参考に(そのまま利用させて頂いております)実装しております。
RewriteEngine On RewriteCond %{HTTP_COOKIE} !LOGIN=([^;]+) [NC] RewriteRule ^.*$ - [E=FORCELOGIN:1] # ドメインと設定したい有効時間(分)を入れる ※以下は1分無操作で再入力を催促させる RewriteRule ^.*$ - [CO=LOGIN:1:XXXX.com:1:/] <If "%{ENV:FORCELOGIN} = 1"> AuthUserFile /dev/null </If> <Else> # .htpasswdを置いた場所 AuthUserFile /home/.htpasswd </Else> AuthName "Member Site" AuthType BASIC require valid-user
実現したいこと
流れとしては参考サイトに書いてある下記でなんとなく理解できているのですが、なぜ2回処理が行われてしまうのかが理解できておりません。
そちらを理解し、2回処理が走ってしまうのを防ぎたいと思っております。
1.LOGINってCookieが存在しなければ、FORCELOGIN環境変数をセット
2.LOGIN Cookieを設定(これによって、2回目(BASIC認証情報入力後)のアクセス時は、1が満たせなくなって、3もスキップされる)
3.FORCELOGIN環境変数が存在すれば、AuthUserFile で指定するユーザー認証ファイルを/dev/nullにして全ユーザーの認証が通らないようにする(これをするのにIF構文を使っているので2.4以降が必要)
4.Cookieには10分の有効期限付きなので、10分間アクセスが無ければCookieは失効して、1の処理が走り、3で強制的に認証させられる
知識不足で大変申し訳ないのですが、ご教授頂けますと幸いです。
あなたの回答
tips
プレビュー