2011-07-27 12 views
0

レイアウトにメタタグを設定して、アイドル状態のまま設定した後にユーザがログアウトするようにしました。CakePHP - ユーザがアイドル状態になるまでの時間制限後に自動的にログアウトする

<meta http-equiv="refresh" content="3600;url=http://www.example.com/users/logout/redirect:%2Fusers%2Faccount" /> 

あなたが見ることができるように、私はログアウトアクションが呼び出されると、ログインページにリダイレクトされると、ログインページがどの知っているように、リダイレクトパラメータとして現在のURL(エンコード)を渡すようにしようとしていますページを使用して、システムが自動的にログアウトしたときの処理に戻します。自動ログアウトが発生した場合に期待されるよう

は、しかし、それはhttp://www.example.com/users/logout/redirect:%2Fusers%2Faccountにリダイレクトしますが、私は404エラーを取得:

/ユーザー/ログアウト/リダイレクト:/ユーザー/アカウント

見つかりませんでした私はここで間違って何をしていますか?

+2

車輪の再発明なぜ? 'core.php'の' Session.timeout'にアイドル時間を設定し、Authコンポーネントを使ってログインのリダイレクトを管理してください。あなたはあなたのレイアウトでメタを必要としません – pleasedontbelong

+0

私はSession.timeoutを認識していませんでした。今、どこにユーザーがいたページにリダイレクトするためにAuthを取得するのですか? – BadHorsie

答えて

2

私は少なくともurlencodeを使用してこれを実現することはできません。これは、Cakeがスラッシュをどのように翻訳して処理するのかによって決まります。私はしかし、詳細についてはわからない!

URLの代わりにbase64_encodebase64_decodeを使用するのが1つの解決策です。

regexのルートを設定して、余分なスラッシュを正しく処理できることがあります。

echo 'http://example.com/users/logout/redirect:' . base64_encode('users/account'); 
//http://example.com/users/logout/redirect:dXNlcnMvYWNjb3VudA== 
+0

ありがとうございます。とにかくbase64を使うことを考えていたので、ログインフォームにユーザ名を渡して、そのフィールドを自動的に記入することができます。 – BadHorsie

1

コアファイルでタイムアウトを設定できます。あなたはapp_controllerに

$this->Auth->autoRedirect = true; 

を追加する必要がありますログイン後にリダイレクトするように

。 (preparing to add authおよびAuthComponent Classを参照してください)

認証コンポーネントは、表示しようとしているページが制御されていることに気付きます。したがって、ログインページのレンダリング後、ページのURLがセッションに格納されます。

0

はのは、それが簡単に作ってみましょうグッドラック) は、ログインビューでprint_r($_SESSION)を行うことができ、それをテストするために、あなたは$_SESSION['Auth']['redirect']

の下でそれを見て、それはそれは=です。私はCake 3.2を使っていますが、古いバージョンは同じだと思います。

ルート情報を設定します。ケーキ3.2では今、あなたの代わりにhttp://domain.com/Users/logoutのURL http://domain.com/logoutへのアクセスにより、ログアウトします/config/routes.php

$routes->connect('/logout', ['controller' => 'Users', 'action' => 'logout']); 

です。あなたのメタタグに

ベース:

<meta http-equiv="refresh" content="3600;/logout" /> 

はそれを試して、それは私のために働いた:D

関連する問題