2017-01-19 10 views
0

ASP.NET 4.0(C#)アプリケーションを実行しています。複数の人が働いているとき、セッションは理想的でなくなりますが、単身者が働くときは15〜20分の理想を過ぎても失効することはありません。ASP.net C#:1人のユーザーのセッションの有効期限が切れた/フラッシュされたときにすべてのユーザーセッションが終了します。

最悪の場合、誰かがログアウトしています(セッションが期限切れになるため)、システムを使用しているすべてのユーザーがログアウトします。

私は、アプリケーションプールのプロパティ/性能が60分に次の

set in web.config 
Set session timeout to 60 minutes in IIS manager/Web site 

プロパティ/ ASP.NET構成の設定 設定されたアイドルタイムアウトを行っています。

<sessionState mode="InProc" cookieless="false" timeout="60" /> 

私のコード 、ページのセッションPage_PreInitの

Session["UserId"] = Convert.ToString(dt.Rows[0]["UserId"]); 

チェック値

if (Session["UserId"] == null) 
{ 
     Response.Redirect("~/Index.aspx"); 
} 

ページ上のセッションの値を取得Requered

ログイン時にセッションに

設定値

string UserId = Convert.ToString(Session["UserId"]); 

複数の人物がログインし、Page_PreInitイベントで作業している場合、セッション["UserId"]はNullになり、コードごとにログインページにリダイレクトされます。しかし、一人の人がセッションや作業をしても決してNullにならない場合、15分後でも理想的です。 何が間違っていたのか分かりませんか?

+0

セッション作成時にフルコードを入力 –

+0

デニッシュ、フルコードのようなものはありません。上記の設定でWeb設定をしたサンプルアプリケーションを作成しました。そして私はログイン時にSession UserIdに値を書いています。あなたは "1"と仮定してページPage_PreInitをチェックすることができますので、SessionはNullかどうかをチェックし、上記のコードではセッションの値を取得するだけでログを取得します。 –

答えて

0

セッション状態に「InProc」を使用しているため、セッションオブジェクトがASP.NETワーカープロセス内に保存されています。アプリケーションプールがリサイクルされると、ワーカープロセスが再開され、セッション状態が失われます。

あなたのサイトに複数のユーザーがいる場合、IISがワーカープロセスをリサイクルさせる原因となっているメモリ/ CPUの制限にぶつかっているということは間違いありません。あなたのサイトをテストしているのは1人のユーザーだけです。限界に達しておらず、ワーカープロセスはリサイクルしていません。

セッションを保存するために外部プロセス(サービス)を使用する "StateServer"モードを使用してみてください。それは労働者のプロセスのリサイクルで生き残ります。

関連する問題