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

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

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

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

1回答

3516閲覧

ログアウト後のキャッシュが全ページに残ってしまう

omame

総合スコア6

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/05/29 02:31

PHP(CakePHP3)でログイン機能を作っています。
自動ログインにチェックを入れるとcookieに登録して、cookieのキーをdbに登録しています。
自動ログインにチェックなしの場合はsessionにユーザーid値を入れています。
ログアウト時はログアウトページで処理をし、別ページに飛ばしてから、戻るボタンを無効にしたいと思っています。

今回ご教示いただきたいのは、
①ログアウトボタンをクリックした後、history.forward();が効かず、キャッシュが残った前のページに戻れてしまう
②ログアウトボタンをクリックした後、ログアウトされ、今度は別アカウントでログインし直した場合、ログアウト前のキャッシュが行ったことのある全ページに残ってしまっていて、そのページは前のアカウント情報が表示されてしまう。

やりたいことは、ログアウト後にトップページに飛ばし、ログアウト前のページに戻れなくしたいということと、
ログアウトしたら、すべてのページのキャッシュが切れるようにしたいです。

###該当のソースコード

php

1function logout(){ 2 3 $log_out=$this->request->data["logout"]; 4 5 6 if($log_out=="on"){ 7 $this->Session->delete(); 8 9 $logintoken=$_COOKIE["logintoken"]; 10 $cookie_dom=$_SERVER["SERVER_NAME"]; 11 12 setcookie('logintoken','', time()-1800,'/',$cookie_dom);//cookieをsetした時と同じ形にする 13 14 $this->Session->destroy(); 15 16 $this->redirect("/logins/logout_while");//一ページ挟んでホームに飛ばす 17 }//if($log_out=="on") 18 19 20 21 }//function logout()

logout_while.ctpでの処理

php

1 <script> 2 history.forward(); 3 location.reload(false); 4 window.location.href="/"; 5 </script>

logoutの処理で、$_COOKIEなどを使用しているのが原因でしょうか?
下記で記述した時にうまくいかず、上記のように記述しています。

//cookieの設定 $this->Cookie->config('path', '/'); $auto_login_key=sha1( uniqid() . mt_rand( 1,999999999 )); $this->Cookie->write('token', $auto_login_key); //$this->Cookie->read('token'));

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

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

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

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

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

guest

回答1

0

「ログアウト前のページ」とは「ログイン状態でのみアクセス可能なページ」ということですよね。
でしたら「ログイン状態でのみアクセス可能なページ」の冒頭で「ログインセッションがない場合は任意のページにリダイレクト」とPHPで処理してはどうでしょうか。

投稿2017/05/29 02:45

m.ts10806

総合スコア80765

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

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

omame

2017/05/29 03:00

回答どうもありがとうございます! ログイン状態でしかアクセスできないページには、下記のようにログインsessionがからの場合は ログインフォームに飛ばす処理をしています。 $u_id=$this->Session->read('u_id');//ユーザーid if($u_id!=""){ $this->set(compact("u_id","u_name")); }else{ $this->redirect("/logins/loginform"); } cakeの下部分に表示される、sessionの部分を見るとキャッシュが残っているページはsessionも前のまま入ってしまっています。 これはsessionが完全に切れていないからなのでしょうか? しかし、全ページを1ページずつ再読み込みすれば、新しいアカウント情報に変わる状態です。 また、ログインしていないと見れないページにログアウトのキャッシュが残ってしまった場合は、ログインフォームのキャッシュが残ってしまう状態です。 ブラウザのcookieを削除してするか、その都度ログイン処理をする状態になってしまっています。
omame

2017/05/29 07:03

ありがとうございます。 if(!is_null($u_id))に直してみましたが、前のキャッシュが残ってしまっているので、変わらない状況です...
m.ts10806

2017/05/29 07:10

こちらの理解不足かもしれません。「キャッシュが残っている」というのはどのような状態でどのように確認されていますか? きちんとsession_destroy()が出来ていればログアウト前に設定していたセッションは全て破棄されているので、アカウント情報も何もでないはずですが・・・。 クッキー削除は試しました?
omame

2017/05/29 07:18

説明不足で申し訳ないです。 ログアウトボタンをクリックするとログアウト処理をするページに飛び session_destroy()の後 $this->redirect("/logins/logout_while"); ↑このページに飛びます。そこで、
omame

2017/05/29 07:29

window.location.href="/";で トップに飛ばしてるのですが、トップに戻った時にまだログイン状態が残っています。 ただ再読み込みをすると更新されてログアウト状態になり、きちんとログインフォームに飛びます。 なので、ログアウトはできていると思います。 続けて別アカウントで再ログインするとトップは新しいアカウント情報に変わるのですが、 前のアカウントで開いたページにリンクでいくと、前の人のアカウント情報が残ってしまっているのです。 そこも再読み込みすれば、新しくログインしたアカウントには変更されます。 cakeを使う前は $_SESSION=array(); if(isset($_COOKIE[session_name()])){ setcookie(session_name(),'',time()-1800,'/'); } session_destroy(); $cookie_tok=$_COOKIE["token"]; $cookie_dom=$_SERVER["SERVER_NAME"]; setcookie('token','', time()-1800,'/',$cookie_dom);//cookieをsetした時と同じ形にする header("Location:./"); exit(); この記述で全部うまくいっていましたが、 どこでこう言う状況になってしまったのかわからないです。
omame

2017/05/29 07:30

クッキー削除のurlありがとうございます。 試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問