14

ユーザーがブラウザを閉じるまで、PHPを利用したサイトにユーザーがログオンし続けるための最良の方法は何ですか?

最初で最も人気のある方法は、を使用すること$_SESSIONです。setcookie2つ目は、関数の3番目の引数としてゼロを渡すことです。setcookie(name, value, 0, domain);

4

7 に答える 7

25

PHPセッションは実際にはCookieによってSIDを保存するため(もちろん、必要に応じて他の方法でSIDを設定できます)、単にそれらを使用する場合でも大きな違いはありません。

主な違いはセキュリティです。Cookieを直接使用すると、クライアントはCookieを直接表示および/または編集できますが、セッションの場合、データはサーバー側に保存されるため、クライアントは直接アクセスできません。

したがって、データがそのセッションでのみ持続する場合は、セッションを使用することをお勧めします。

補足:複数のサーバーを使用して負荷を分散する場合、セッションデータはデフォルトでサーバーにローカルに保存されるため、細心の注意を払う必要があります。複数のサーバー間でセッションデータを共有することは可能ですが、これはこの質問の範囲を超えています。または、データベースにデータを保存することもできます。

于 2012-06-22T07:12:59.107 に答える
4

PHPセッションに参加することをお勧めします。そのシンプルで、あなたはあなた自身でクッキーを扱う必要はありません。

以下は、セッションを真に破棄するためのコードであり、PHPマニュアルに記載されているからコピーして貼り付けたものです。

// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

// Unset all of the session variables.
$_SESSION = array();

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();

あなたの質問について:

ユーザーがブラウザを閉じるまでログインしたままにするために使用する方がよいでしょうか。

ユーザーがいつブラウザを閉じたかを判断するためのフェイルプルーフの方法はありません。1つのアプローチは、サーバーに小さなAJAXリクエストを継続的に送信し続けることです。リクエストが長期間表示されない場合は、セッションを破棄します。

もう1つのアプローチは、DOMウィンドウのアンロードをリッスンし、サーバーに要求を送信してセッションを破棄することです。

于 2012-06-22T07:21:31.117 に答える
3

$_SESSIONを使用する必要があります

Cookieが有効になっている場合は、PHPセッション識別子にCookieが使用されるためです。したがって、別のCookieを作成することは最適ではありません。

セッションの代わりにCookieを使用する唯一の理由は、負荷分散を処理する場合です。したがって、2つのサーバーがあり、そのうちの1つに障害が発生した場合、そのサーバーのセッションは失われます。これで、ログインしたユーザー(サーバー1でセッションを行ったユーザー)は再度ログインするように求められます。しかし、代わりにCookieを持っていれば、再度ログインするように求められることはありません。

于 2012-06-22T07:29:28.903 に答える
3

セッションはこの目的のためのものなので、私はそれで行きます。

于 2012-06-22T07:08:23.070 に答える
3

「セッションは、ユーザーがCookieを許可することに依存していません。代わりに、ユーザーがブラウザを開いているときに情報にアクセスして渡すことを許可するトークンのように機能します。セッションの問題は、ブラウザを閉じるとセッションも失われることです。ログインが必要なサイトがある場合、これをCookieのようにセッションとして保存することはできず、ユーザーはアクセスするたびに再ログインを余儀なくされます。

もちろん、両方の長所を活かすことができます。それぞれが何をするのかがわかれば、Cookieとセッションを組み合わせて使用​​して、サイトを希望どおりに機能させることができます。」

http://php.about.com/od/learnphp/qt/session_cookie.htm

于 2012-06-22T07:09:11.743 に答える
3

クッキーはドメインごとに制限されており、20個のクッキーを設定できます。それぞれの最大サイズは4kbです。

于 2012-06-22T08:28:06.213 に答える
1

簡単なものとして$_SESSIONを使用します。:Pとにかく、上記のように、ケースを決定します。ブラウザを閉じた後もしばらくの間ユーザーのログインを維持する必要がある場合は、Cookieを適切に使用してください。それはあなたにとってセキュリティ上の脅威になる可能性があります!それ以外の場合はセッションを使用します。

于 2012-06-22T07:17:38.547 に答える