2012-03-12 10 views
1

次のパッケージを使用して私のサイトでremember me機能を使用しました:http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/。それは正常に動作しています。しかし、私は削除されたユーザーだけであるために署名した滞在のアカウントにアクセスすることができ、問題に直面Zend framework私を覚えている - 働いている問題

次のようなシナリオは次のとおりです。。

  1. ユーザログインログイン私を保つ設定した後
  2. 彼が去りますシステムはログアウトせずにシャットダウンします。
  3. その日の夕方にアカウントが削除されています。
  4. 彼は翌日の朝にサイトを取得します。

彼は自分のセッションを取得し、自分のアカウントが前日に削除されたという事実を知らずに自分のアカウントで話をして、何でもやり遂げることができました。また、私は14日間覚えています。

このアイデアを解決する方法はありますか?彼が署名した滞在を設定していたとして

おかげ

+0

チェックした内容のみを確認できます。セッションが終了してユーザーが削除され、ユーザーのログインを維持するための永続的なログイン手順が開始されると、ユーザーがまだ存在していることを確認する必要があります。 – hakre

+0

本当にユーザーの認証方法によって異なります。あなたのデータベースにアクセスし、自分のアカウントを手動で削除しようとすることができます。 – Tom

+0

shirleyサイトは何か編集や投稿があったときにチェックする必要があります。そうでなければ、私はあなたにこのような大きな問題を与えている場合は、ログインしているオプションを削除することをお勧めします。セッション情報をチェックして、そのユーザーが翌日にサイトに戻ったときにそのユーザーがまだ存在するかどうかを確認することもできます。それ以外には、私はこれを強制する良い方法を考えることができません。 – jammypeach

答えて

3

がためのセッションの有効期限を延長、それを試してみましょうポスト新ような何かをしようとするたびに確認する必要があります考えて言ったように削除されたユーザーのセッションを維持しているだけでなく、数時間以上はさまざまな理由から悪い考えです。また、データベース/セッションストレージにアクティブセッション(session_id)を保持しているという事実に関連するパフォーマンスとセキュリティの問題もあります。

persisted login with Zend_Session::rememberMeを参照してください。

いずれにせよ、あなたは彼のユーザーがまだ存在することを確認し、アクティブにするために、各ページの読み込み時にユーザーアカウントを再検証する必要があります

私は、私はすべてのページのロードを呼び出す再検証機能を作成しました。この関数は、ユーザが何かできるようになる前に、コントローラのinit()関数から呼び出されます。

public static function revalidate() { 
     $userData = self::getIdentity(); 

     $modelUsers = new \Model_Users(); 
     $user = $modelUsers->fetchWithEmail($userData['email']); 

     if ($user instanceof \Model_User) { 
      if ($user->getRoleType() == 'ACCOUNT') { 
       return $user; 
      } 
     } 
     return false; 
    } 
2

は、彼が彼のセッションを取得し、彼は話を投稿し、自分のアカウントは、前の日に削除してしまったという事実を知らずに自分のアカウントで、これまで何を行うことができます。

ユーザーを削除すると、そのユーザーのすべてのセッションも削除する必要があります。

+0

ありがとうお友達に!! – Janaki

0

これはまさにです。なぜあなたはすべてのアプリケーション/ページに対してセッションタイムアウトを設定する必要がありますか。

使用ini_set()、セッションライフタイムに

ini_set("session.cookie_lifetime","1800"); //half an hour 

セッションは、データベース内の自分のSESSIONSテーブルで

if (!empty(session_id())) { 
    header("Location: index.php"); //GO to home page 
    exit; 
} 
+0

貴重なご意見をいただきありがとうございます。 – Janaki

1

などのすべての保護されたページで生きている場合は、外国人を使用し、ご確認くださいON DELETE CASCADEを使用するUSERS表のキー。または、セッションをフェッチするときに、userテーブルに対してJOINを実行できます。

0

ユーザーがコンピュータを離れて翌日にあなたのウェブサイトに戻ったとき、彼のセッションは長く失効しています。この時点で、彼があなたのウェブサイトにアクセスすることを許可しているのは、彼がコンピュータにクッキーを設定することによって行うことを選択したからです。

クッキーに基づいてユーザーを認証する場合、は、はデータベースに対してCookieの値を確認する必要があります。 単にクッキーの存在を確認しないでください。

これで問題が解決します。また、悪意のある人物が簡単に手動で自分のコンピュータにクッキーを作成し、それを使ってあなたのウェブサイトを認証することができる、大きなセキュリティホールを塞ぐでしょう。

0

あなたがチェックした内容のみを確認することができます。セッションが終了し、 ユーザーが削除され、永続的なログイン手順が実行されて がログインしたままになると、ユーザーはまだ存在するかどうかを検証する必要があります。 - hakre

hakreは、私はあなたがユーザーに彼が、設定を変更したり、新しいポストを送信するか、などのコメントのが

関連する問題