2010-12-14 10 views
2

私は自分のサイトの各クライアントのセッションコードを作成しようとしています。グローバルasaxのSession_Startで私はこのコードを持っています:ASP.NETセッション識別子

private static long codSesion = 0; 
private static object codSesionLocker = new object(); 
protected void Session_Start(object sender, EventArgs e) 
{ 
    if (Session["CodSesion"] == null) 
    { 
     lock (codSesionLocker) 
     { 
      if (Session["CodSesion"] == null) 
      { 
       if (codSesion == 9999) 
        codSesion = 0; 
       codSesion++; 
       Session["CodSesion"] = codSesion; 
      } 
     } 

    } 
} 

これをモニターすると完璧と思われます。何もしない時間が過ぎると、問題が始まります。 1つ目は、1回から何回もやり直すことです(9999に到達せずに、IISの再構築なしで)。そして、最近ではtahtよりもさらに悪い:私はコード1と2を使いました。私はサーバーの使用をやめました(活動をせずにIISを取り消す)。ほぼ1時間(50分)後、もう一度試しました。 IISが私に与えたコードは2であった(最後のコード2とは異なるPCで)。

本当にありがとうございます。

+0

作成したリクエストで実際にセッションにアクセスするコードはありますか? – Restuta

+0

そして、なぜ、あなたはこれで大丈夫ではないのですか? http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.sessionid.aspx – Restuta

+2

あなたは何を達成しようとしていますか?セッションはすでにID:SessionID ... –

答えて

3

上記のすべての動作について説明しているかどうかはわかりませんが、既定では、IISのアプリケーションプールは一定期間使用しないとリサイクルされます(これらの設定は各アプリケーションプールに対してIISで変更できます)。アプリケーションプールがリサイクルすると、プールの新しいインスタンスが完全に再初期化されます。

+0

ありがとう、実際に起こっていたことです。 @rdkleineソリューションを実装しました(ファイルにcodSesionを保存しました)。 – Diego

2

IISはワーカープロセスをリサイクルするため、codSessionの静的な値が失われます。

この問題を解決するために、情報をファイルまたはデータベースに保存してください。

2

一定時間使用しないと、IISはアプリケーションを停止します。誰かが訪問すると、サイトが再び開始されます。これを、おそらくIn Processes Session Stateを使用しているという事実と組み合わせると、値がリセットされているのがわかります。

あなたがここで説明するように、データが永続化されるように、セッションを保存するためのSQLServerを使用するように試みることができる:

MSDN - ASP.NET Session State

それが動作する場合であっても、この方法でセッションを使用しようとすることは悪い考えです。あなたが達成しようとしていることに依存して、物事を扱う良い方法があります。

関連する問題