asp.Net削除ファイルセッションが失われました

2677 ワード

ASPを修正したらNETアプリケーション(dllファイル)は、binフォルダまたはWebを変更する.configファイル(追加/削除/名前変更されたファイルなど)は、このサイトが実行されているので、AppDomainでの再起動につながることに気づいたかもしれません.すべてのセッションステータスが失われ、Webサイトが再起動に成功し、ログインしたユーザーは終了します(永続クッキー認証を使用しないと仮定します).もちろん、私たちがwebを修正したとき.configファイルを保存し、AppDomainを再起動させる必要があります.
私たちは時々動的にフォルダを作成して削除して、ASP.NET 2.0では、フォルダの削除によってAppDomainが再起動され、深刻な問題が発生します.たとえば、E-コマースWebサイトの製品の場合、ディレクトリに保存したい製品の名前IDの製品からの画像、たとえば./productImages/123/ipod-nano.jpgは、身分証明書画像の記録でもある.これにより、他のアップロードされたファイルや画像ファイル名との競合を回避できます.もちろん、データベースから製品を削除するには、対応する画像とフォルダを削除する必要がありますが、AppDomainの再起動の問題ではありません.なぜなら、サーバに残っている空のフォルダを削除します(ファイル削除でアプリケーションが再起動しないからです).
ソリューション
幸いなことに、Reflection and HttpModulesのソリューションがあります.まず像を作成します.csファイル...
 
  
using System.Reflection;
using System.Web;
namespace MyWebsite
{
///
/// Stops the ASP.NET AppDomain being restarted (which clears
/// Session state, Cache etc.) whenever a folder is deleted.
///

public class StopAppDomainRestartOnFolderDeleteModule : IHttpModule
{
public void Init(HttpApplication context)
{
PropertyInfo p = typeof(HttpRuntime).GetProperty("FileChangesMonitor",
BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static);
object o = p.GetValue(null, null);
FieldInfo f = o.GetType().GetField("_dirMonSubdirs",
BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring",
BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { });
}
public void Dispose() { }
}
}

Application_StartはGlobalを使用する.asaxファイルでInit()コードに配置されているApplication_スタート中です.Globalにいると信じています.Asaxの使用方法は古く、HttpModulesを使用してネットワーク(アプリケーションライフサイクルのセッション開始、セッション終了時)に応答できます.InitメソッドはGlobal.asaxとApplication_Startの役割は同じで、DiposeはApplication_に似ています.End.
上記のコードで機能するには、webが必要です.configファイルセグメントに挿入:
type="MyWebsite.StopAppDomainRestartOnFolderDeleteModule"/>
なお、「stopAppDomainRestartOnFolderDelete」はカスタムの任意の名称である、「MyWebsite」は上記である.csファイルのネーミングスペースは、一般的にプロジェクト名です.「S t o p A p D o m a m i n RestartOnFolderDeleteModule」は上記である.csファイルのクラス名.
これがそれです.これにより、フォルダ削除AppDomainの再起動が防止され、Webが変更されます.configとbinフォルダは、まだ再起動されます.これは私たちが望んでいることです.
しかし、いくつかのファイルを削除するとsessionが期限切れになるのはなぜですか?まだ分からない...そこでネットで検索すると次のような方法があります
次のセッションの保存方法をstateserverに設定すればいいです.
stateConnectionString="tcpip=127.0.0.1:42424"/>
パラメータは見ただけで意味がわかります..