HTTPは、ある理由でステートレスプロトコルです。セッションはHTTPに状態を溶接します。経験則として、セッション状態の使用は避けてください。
更新:HTTPレベルでのセッションの概念はありません。サーバーはこれを提供するために、クライアントに一意のIDを与え、要求ごとに再送信するようにクライアントに指示します。次に、サーバーはそのIDをSessionオブジェクトの大きなハッシュテーブルへのキーとして使用します。サーバーはリクエストを受け取ると、クライアントがリクエストで送信したIDに基づいて、セッションオブジェクトのハッシュテーブルからセッション情報を検索します。この余分な作業はすべて、スケーラビリティの二重の欠点です(HTTPがステートレスである主な理由)。
- ワーミーワン:1台のサーバーで実行できる作業を減らします。
- Whammy Two:リクエストを古いサーバーにルーティングするだけではできないため、スケールアウトが難しくなります。すべてのサーバーが同じセッションを持っているわけではありません。特定のセッションIDを持つすべてのリクエストを同じサーバーに固定できます。これは簡単ではなく、単一障害点です(システム全体ではなく、ユーザーの大きなチャンク)。または、クラスタ内のすべてのサーバー間でセッションストレージを共有することもできますが、ネットワーク接続メモリ、スタンドアロンセッションサーバーなど、さらに複雑になります。
以上のことから、セッションに入力する情報が多いほど、パフォーマンスへの影響が大きくなります(Vinkoが指摘)。また、Vinkoが指摘しているように、オブジェクトがシリアライズ可能でない場合、セッションは正しく動作しません。したがって、経験則として、セッションに絶対に必要以上のものを入れることは避けてください。
@Vinko通常は、追跡しているデータを返信に埋め込んでクライアントに再送信させることで、サーバーにストア状態を保持させます。たとえば、非表示の入力でデータを送信します。あなたがいる場合、実際に状態のサーバ側の追跡を必要とする、それはおそらくあなたのバッキングストアにする必要があります。
(Vinkoは追加します:PHPはデータベースを使用してセッション情報を保存でき、クライアントに毎回データを再送信させることで潜在的なスケーラビリティの問題を解決できる可能性がありますが、クライアントがすべてを制御できるようになるため、注意が必要な大きなセキュリティ上の問題が発生しますあなたの状態)