6

ユーザーがログインしていくつかのことを実行できるようにするアプリを CakePHP で作成しました。これにより、ユーザーはデフォルトで約 24 時間ログインしたままになります。そして、これは、Cookieも作成されるため、セッション/ Cookieによって処理されます...

1.) じゃあ、リメンバーミーはパーティーに何を持っていく?タイムアウトを設定し、ユーザーをログインさせたままにする別のCookieを作成するだけです...しかし、この機能はデフォルトですべてのアプリに存在し、セッションの権利がありますか? しかし、私は多くのサイトがこれを行っているのを見てきましたが、セッションが箱から出してこれを行っているため、理由がわかりません:/

2.) また、ユーザーが Web サイトを引き続き使用している場合でも、セッションが期限切れになるのはなぜですか? たとえば、1 分に設定しても 30 秒ごとに更新すると有効期限が切れます... しかし、有効期限が切れる前にサイトをアクティブに保ちました。アプリの有効期限が 1 時間であるため、これは面倒ですが、クライアントがサイトを使用している場合でも、アクティビティに関係なく 1 時間後に有効期限が切れます。

誰かがこれらの2つの質問に答えることができれば素晴らしいでしょう.

更新: CakePHP の専門家にこの問題の解決を手伝ってもらうことを期待して、これに関する報奨金を作成しました。問題は、ユーザーの操作に関係なく、タイムアウト後にセッションが期限切れになることです。私がやりたいのは、5 分間続くセッションがあり、ユーザーが 30 秒ごとにポストバックを引き起こした場合、そのセッションは 5 分後も残っているということです。現時点ではそうではありません...

Configure::write('Session', array(
        'start' => true,
        'defaults' => 'php',
        'timeout' => 1,
        'cookieTimeout' => 1,
        'autoRegenerate' => true
    ));
4

5 に答える 5

8
  1. これにより、ユーザーがブラウザを閉じて再起動しても、自動的にログインできるようになります。これはセッション Cookie には当てはまりません。そのような Cookie はブラウザーが閉じられるとすぐに削除されるためです。

  2. 30 秒ごとにアクセスしたページがセッションを開始しなかった可能性があります。その場合、セッション メカニズムは使用されず、セッションの有効期限は にリセットされませんnow + 1 minute。または、更新がサーバーではなくブラウザのキャッシュにヒットするだけかもしれません。

于 2012-06-20T20:16:04.413 に答える
8

OK、説明スキルをテストしながら、その報奨金 (戦利品?) の一部をつかむことができるかどうか見てみましょう :)

それでは、#1から始めましょう。

では、リメンバーミーはパーティーに何を持っていくでしょうか?

ここで重要なのは、「セッション cookie」と「remember me cookie」の違いです。

HTTP はステートレス プロトコルであるため、セッション Cookie を使用して複数のリクエストを 1 人のユーザーに関連付けます。それがなければ、Web サーバーへのすべてのリクエストは、他のすべてのリクエストとはまったく関係ありません。セッションなしでアプリケーションを書くことを想像できますか? すべてのリクエストは完全に空で、ログインもセッション変数もありません..すべてのリクエストは未知のユーザーです! これは基本的に、Web アプリケーションがないことを意味します。

ここで重要なことは、セッションが 24 時間続くことは絶対に望んでいないことを認識することです。私の本では、これは非常に大きなノーノーです。セッションが短いほど、(少なくとも理論的には) 安全です。なんで?セッションがハイジャックされる可能性があるためです。セッションが長く続くほど、ハイジャックされる可能性が高くなります。

たとえば、銀行のアプリケーションを想像してみてください。また、あなたのユーザーが公共の PC でアクセスしていると想像してください (私たちのユーザーは最も優秀ではありません)。それで、彼は自分のアカウントか何かを管理しています..そして彼の電話が鳴ります。ばかなので、彼は電話に出て、ログアウトせずに去ります。セッションを 5 分、15 分、または 24 時間で期限切れにしますか? あなたのことは知りませんが、オンライン バンキングと同じくらい重要なことについては、そのセッションをできるだけ早く終わらせたいと思っています。

「私を覚えている」部分に移ります。

セッション Cookie は単一のセッションで複数のリクエストを「接続」しますが、「remember me」Cookie は何をするのでしょうか? 簡単に言うと、複数のセッションを 1 人のユーザーに関連付けます。

あなたは自分のサイトを簡単で快適に使いたいと思っていますが、ログインが快適になることはほとんどありません。本当にやりたいことをする前に毎回しなければならないのは面倒なことです。リメンバー ミー クッキーは、その煩わしさを取り除きます。

一度ログインしてチェックボックスをオンにすると、その PC に常にログインした状態になります。次の人があなたの身元を知ることになるため、共有 PC では「remember me」機能を使用しないでください合法的に。これが、Cookie がセキュリティ上のリスクでもあることを覚えておいてください。セッション Cookie と同じようにハイジャックされる可能性があります。

最後に、セッション Cookie と Remember Me Cookie の決定的な違いが 1 つあります。有効期限です。セッション Cookie は通常、ブラウザーを閉じると (または明示的に指定した時間が経過すると) 期限切れになりますが、Cookie は通常、それよりもずっと長く存続します。

また、ユーザーが Web サイトを使用し続けている場合でも、セッションが期限切れになるのはなぜですか?

簡単にするために、そうではありません。Cake (またはアプリケーション) がセッションを処理する方法を変更したに違いありません。答えはコードのどこかにあるはずです。ここで満足のいく回答が得られなかった理由は、コードが見えないためです。Cookie に何が起こるかをデバッグして追跡するだけです。JB Nizet がいくつかの提案をしました。

一部のサーバーで問題を引き起こす可能性があることの 1 つは、cake のセキュリティ レベルです。あなたの中でそれを下げてみてください/Config/core.php

Configure::write('Security.level', 'medium'); // or 'low'

それでも問題が解決しない場合、答えは間違いなくコードにあります。この答えがあなたを正しい方向に導くことを願っています!

于 2012-06-24T12:35:19.373 に答える
1

タイムアウトと組み合わせたセキュリティ設定の組み合わせを理解してください。これは非常に重要な部分です。セキュリティが高レベルに設定されている場合、予期せずにセッションが強制終了される可能性があります。

次は、内部のケーキ セッション ストアでのテストです。そうすれば、ローカル システムの構成がそれに影響を与えることはありません。PHP の設定が Cake の設定を上書きしている可能性があります。したがって、セッション ストアを Cake に設定します。これにより、制御可能なセッションを含むディレクトリが作成されます。

同様に、これはサーバー設定の組み合わせであり、Cake の構成がこれらのサーバー設定を上書きすることを期待しています。

于 2012-06-24T12:08:41.867 に答える
1

1.) セッション Cookie と「remember me」の違いは、セッション Cookie の有効期限が「0」であることです。これは、「ブラウザを閉じると期限切れになる」という意味です。一方、「remember me」は特定の有効期限 (たとえば 1 か月後) を同じセッション Cookie に与えます。それが唯一の違いです。この機能の違いは取るに足らない、または無意味だと思うかもしれませんが、次のことを考慮してください。一方で、職場では、おしっこをしなければならないたびにわざわざ Cookie を削除したくありません。

2.) アプリケーションが使用されている場合でも、セッション Cookie は期限切れにならないようにする必要があります。この動作はどこで、どのような状況で見られますか? 違います。

于 2012-06-23T21:02:36.230 に答える
0

私がこれを行う場合:

    Configure::write('Session', array(
        'start' => true,
        'defaults' => 'cake',
        'timeout' => 1,
        'cookieTimeout' => 1,
        'autoRegenerate' => true
    ));

/**
 * The level of CakePHP security.
 */
    Configure::write('Security.level', 'high');

それは問題を修正します!したがって、セッションは 10 秒間続きますが、2 ~ 3 秒ごとに更新すると、Cookie が更新されているため、10 秒後にログインしたままになります。したがって、私のホスティング環境の PHP 設定がセッション/Cookie の期限切れを引き起こしている/していたようです...なぜこれが起こるのでしょうか?

于 2012-06-24T12:35:42.883 に答える