2011-02-04 21 views
1

私は、ユーザーがログインするときにセッション状態を使用して変数を格納するasp.netアプリケーションc#を持っています。これはログイン名であり、ユーザー領域全体に広く使用されています。問題は、セッションが特定のコンピュータの情報を失うことがないということです。私はセッションの状態について本当に分かりません。なぜこれが起こったのか知りたかったのです。例。ユーザーがグリッド上で異なる選択肢を通過すると、約2分後に画面上のセッション状態変数を示すラベルが空になり、データベースにユーザー名をスタンプする必要があるためレコードを追加するときに問題が発生しますレコード。セッション状態を失う値

要約します。セッション状態変数の値が数分後に失われ、すべてのコンピュータで失われるのはなぜですか? (私はクライアントマシン上でしかコンピュータに問題ありません - 典型的なものではありません)

もう少し情報があります。

私はすなわち

session["username"] = username.Text; 

とも私は持っているホスティングすることは、私は、IISの設定(かなり安いジョブイムで行うことは非常に少しを持っていることを意味し、共有ホスティング環境で、サーバー側のコードでセッションを使用恐れ入ります)Web設定の変更を試みて、報告します。すべての答えをありがとう。

+0

は、使用しているセッション状態プロバイダとWebサーバーの数を知る必要があります。 –

+3

ちょうど不思議なことに、あなたが望むログイン名だけであれば、HttpContext.Current.User.Identity.NameではなくSessionを使用している特定の理由がありますか? – David

+0

prod Webサーバーの構造は何ですか?ロードバランサを備えたWebファーム? – odez213

答えて

4

問題が分かっている場合は、セッションデータをプロセス外に保管する必要があります。 SQLServerデータベースを使用している場合は、「State Server Mode」または「SQL Server Mode」を使用できます。ここで

あなたはhttp://msdn.microsoft.com/en-us/library/ms178586.aspx

を使用する方法を見つけることができるそうでなければ、「カスタムセッション状態ストアプロバイダ」を建てことができますが、私はそのようにはもう少し複雑だと思います。

2

2分後にセッションがタイムアウトしている可能性がありますか?値は

<sessionState timeout="40"></sessionState> 

それとも、global.asaxでセッションタイムアウトハンドラを記述し、それが原因だかどうかを確認するために、それにブレークポイントを置くことができるようなラインでweb.configにする必要があります。

+0

私は現在

+1

@Daniel、errr、申し訳ありません、私は間違った行をコピーしました。 'sessionState'の' timeout'属性をチェックしてください。 – Blindy

0

セッション状態を保存する方法は複数ありますが、最も一般的な2つはクライアント側Cookieとサーバー側セッションです。 (私たちはセッション状態のサーバーとデータベースにセッションを格納することができますが、私はむしろそうしたくないでしょう)

あなたは他のユーザーがissuseを持っていると言いますが、セッションがおそらく期限切れだとは思わない場合。ユーザーが常に何をしているのかを判断するのは難しいですが、ログインには1時間か2時間かかり、セッション状態がまだあるかどうかを確認するためのテストが必要です。 IISでセッションのタイムアウトを制御し、web.configでセッションのタイムアウトを設定することもできます。 configがほとんどのシナリオでiis設定を上書きすると思われていても、これらのシナリオではうまく機能せず、IISおよびWeb設定のセッション状態の有効期限を更新するほうがよい。

-1

私はあなたが値を保存するためにセッションを頻繁に使用していると思います。必要なときだけ使用してください。

そしてここにあなたのウェブサイトは、その後allowedアプリケーションプールをより多くのメモリを使用されるようにあなたは、IISにチェックして、ウェブサイトのためのapplication poolを増やし、その後、頻繁な問題に直面しているようにIIS recycles the sessionsession values are LOST

+0

'SHARED Hosting'の' application pool'を増やすためにあなたはあなたがホストしているホスト 'support'に連絡することができます... –

4

それぞれが状態を維持している複数のIISサーバーを持っているように思えます(間違っているかもしれませんが)。ロードバランシングを行っている場合、同じサーバーに2回ヒットする保証はありません。したがって、サーバーAはあなたが探している状態情報を持っていますが、サーバーBはありません。

ロードバランシングはありますか?その場合は、状態管理にSQLサーバーを使用することもできます。

関連する問題