1

次のパッケージを使用して、自分のサイトでremember me機能を使用しました:http ://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/ 。正常に動作しています。しかし、サインインしたままでいるという理由だけで、削除されたユーザーがアカウントにアクセスできるという問題に直面しています。

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

  1. 設定後のユーザーログインはログインしたままにします。
  2. 彼はサインアウトせずにシステムをシャットダウンしたままにします。
  3. 彼のアカウントはその日の夜に削除されます。
  4. 彼は翌日の朝に現場に行きます。

サインインしたままに設定したので、彼はセッションを取得し、前日にアカウントが削除されたことを知らなくても、ストーリーを投稿してアカウントで何でもできるようになりました。また、14日間覚えておくように設定しました。

この問題を解決する方法はありますか?

ありがとう

4

6 に答える 6

3

セッションの有効期限を数時間以上延長することは、削除されたユーザーのセッションを保持しているという理由だけでなく、多くの理由で悪い考えです。データベース/セッションストレージでアクティブなセッション (session_id を使用) を維持しているという事実に関連するパフォーマンスとセキュリティの問題もあります。

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;
    }
于 2012-03-12T20:51:12.597 に答える
2

サインインしたままにするように設定していたので、彼はセッションを取得し、前日にアカウントが削除されたことを知らなくても、ストーリーを投稿したり、アカウントで何でもしたりできました。

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

于 2012-03-12T11:16:13.330 に答える
1

データベースの SESSIONS テーブルで、ON DELETE CASCADE で USERS テーブルへの外部キーを使用します。または、セッションを取得するときにユーザー テーブルで JOIN を実行できます。

于 2012-03-12T11:18:25.007 に答える
0

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

を使用ini_set()して、セッションの存続時間に

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

次に、次のようなすべての保護されたページでセッションが有効かどうかを確認します

if (!empty(session_id())) {
    header("Location: index.php"); //GO to home page
    exit;
}
于 2012-03-12T11:17:49.030 に答える
0

ユーザーがコンピューターを離れて翌日 Web サイトに戻ってくると、セッションの有効期限が切れています。この時点で、彼にあなたのウェブサイトへのアクセスを許可するのは、コンピューターに Cookie を設定することで、彼が記憶されることを選択したためです。

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

これで問題が解決します。また、悪意のある人物が自分のコンピューターに手動で Cookie を簡単に作成し、それらを使用して Web サイトの認証を取得できる主要なセキュリティ ホールを塞ぎます。

于 2012-03-12T11:20:26.213 に答える
0

チェックしたものしかチェックできません。セッションが終了し、ユーザーが削除され、ユーザーのログイン状態を維持するために永続的なログイン手順が開始された瞬間に、ユーザーがまだ存在することを確認する必要があります。– ハクレ

ハクレが言ったように、ユーザーが設定を変更したり、新しい投稿を送信したり、新しいコメントを投稿したりするなどのことを試みるたびに、ユーザーを確認する必要があると思います。

于 2012-03-12T11:22:09.650 に答える