2011-08-19 23 views
5

私は次の行を持っています。Sql Serverに設定されているとセッションタイムアウトが機能しないのはなぜですか?

<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

これは、SQLステートサーバーにセッションを格納します。ただし、1分後にはタイムアウトが正しく行われません。

InProcモードを使用するように回線を変更したとき:

<sessionState mode="InProc" sqlConnectionString="Data Source=localhost;User Id=sa;Password=test;" timeout="1" /> 

1分後にタイムアウトします。

これはなぜ起こっているのですか? SqlServerを使用している場合、どのようにタイムアウトすることができますか?

答えて

6

SQL Server Expressを使用している場合は、DeleteExpiredSessionsプロシージャを実行するSQL Serverエージェントがないためです。ここで

が問題の可能な回避策です:セッションを更新するストアドプロシージャで

、私は ストアドプロシージャを更新セッションにDeleteExpiredSessions手順からSQL を追加した(私は思い出すことができません古いセッションを確認するように、 は古いセッションを削除し、現在のセッションを更新します。セッションを更新する ストアドプロシージャは、クリックごとに実行されます。 したがって、セッションの前に古いセッションを削除する2行が追加されました。 が更新されました。これはうまくいくようです。

1

あなたは、フォーム認証Cookieのタイムアウトを設定することにより、セッションのタイムアウトを制御することができる場合があります

FormsAuthenticationTicket authTicket = 
new FormsAuthenticationTicket(1, // version 
txtUserName.Text, 
DateTime.Now, 
DateTime.Now.AddMinutes(1), 
false,@"\"); 

ユーザーが1分後にセッションとの接触を失っその方法。

+0

フォーム認証タイムアウトとセッションタイムアウトは、2つの別個のものです。 – KingOfHypocrites

6
  1. SQL Serverエージェントサービスが

  2. ASPState_Job_DeleteExpiredSessionsという名前のSQL Serverエージェントジョブを右クリックし、「履歴の表示」をクリックし実行していることを確認してください - このジョブが正常にすべての1を実行していることを確認してください分。私の場合は

、何らかの形で(おそらく名前付きインスタンスを含む複数のインストールの1の間に)私のSQL Serverエージェントは、単にサーバー名ではなくサーバー名\のINSTANCENAMEにそのプロパティConnection -> Alias Localhost Serverセットを持っていました。

この変更が発生すると、ASPState_Job_DeleteExpiredSessionsが無期限に実行されて停止することができませんでした。したがって、SQL Serverエージェントサービスを再起動しようとしましたが、バックアップが開始されませんでした。しかし、Connection -> Alias Localhost Serverプロパティをservername \ instancenameに変更すると、SQL Serverエージェントが正常に起動し、ASPState_Job_DeleteExpiredSessionsジョブが1分に1回正常に実行され始めました。これが明らかに私のタイムアウトの問題を解決しました。

+0

ありがとう、これは私のために働いた –

関連する問題