Web サーバー (具体的には HTTP プロトコル) はステートレスです。つまり、接続しているブラウザの情報を維持したり、ユーザーから要求された個々のページの要求を維持したりすることはできません。Web サーバーが Web ページに対する要求を受信して、関連するページをユーザーのブラウザに配信するたびに、Web サーバーでは要求を実行したブラウザと送信したページの記録は消去されます。後で同じユーザーが関連するページを要求したときも、Web サーバーはそのユーザーに対して最後に送信したページを認識することなく、要求されたページを送信します。
ステートレスという HTTP の性質は、プロトコルの簡潔さと実装の容易さには役立ちますが、パーソナライズしたコンテンツの生成などの高度な Web アプリケーションの作成は困難になります。たとえば、サイトのコンテンツを個々のユーザーに合わせてカスタマイズするには、最初にユーザーを識別する必要があります。多くの Web サイトでは、なんらかの形式のユーザー名とパスワードによるログインでユーザーを識別します。カスタマイズしたページを複数表示する場合は、ログインしているユーザーの情報を保持する方法が必要です。ほとんどのユーザーは、サイトのページごとにユーザー名とパスワードを入力することを面倒に感じるからです。
複雑な Web アプリケーションの作成と、ユーザーが入力したデータをサイトの全ページで保存することを可能にするために、ほとんどのアプリケーションサーバーテクノロジーには、「セッション管理」のサポートが組み込まれています。セッション管理では、Web ページに対するユーザーの要求を同じ対話セッションの一部として一定時間だけ表示することによって、Web アプリケーションは複数の HTTP 要求にわたり状態 (ステート) を維持できるようになります。
セッション変数に情報が格納されているのは、ユーザーのセッションが終了するまでです。ユーザーのセッションは、ユーザーがアプリケーションでページを最初に開いたときに始まります。セッションが終了するのは、一定の時間が経過してもユーザーが別のページを開かなかったとき、またはユーザーが明示的にセッションを終了したとき (通常は "ログオフ" リンクをクリック) です。セッションが存在している間は、セッションはユーザーに固有のもので、各ユーザーがそれぞれ別のセッションを持ちます。
セッション変数を使用して、Web アプリケーションのすべてのページでアクセスできる情報を格納します。格納する情報は、ユーザーの名前、初期設定のフォントサイズ、ユーザーのログインが正常に実行されたかどうかを示すフラグなどさまざまです。セッション変数のもう 1 つの一般的な用途は、ユーザーがオンラインクイズでこれまでに正解した問題数や、オンラインカタログでこれまでに選択した商品など、現在の記録を保持することです。
セッション変数が機能するのは、ユーザーのブラウザが Cookie を受け入れるように設定されている場合のみです。セッションの開始直後に、サーバーはユーザーを一意に識別するセッション ID 番号を作成し、この ID 番号が含まれている Cookie をユーザーのブラウザに送信します。ユーザーがサーバー上の別のページを要求した場合、サーバーはブラウザ内の Cookie を読み取ってユーザーを識別し、サーバーのメモリに格納されているユーザーのセッション変数を取得します。