PDA

View Full Version : سوال: بعد از حذف دایرکتوری سشن اکسپایر میشه!



aref1364
دوشنبه 17 خرداد 1389, 20:36 عصر
سلام،

من از ASP.NET با VB.NET استفاده می کنم.

در قسمتی از برنامه یک دایرکتوری را با تمام محتویاتش از روی هاست و همچنین رکورد مربوطه در پایگاه داده حذف می کنم. ولی بعد از اینکه عملیات حذف انجام شد و روی دکمه ی دیگه ای کلیک می کنم، برمی گردم به صفحه ی لاگین که احتمالا به خاطر اکسپایر شدن سشن است. ولی دلیل این اتفاق رو نمی دونم.

اینم دستور:



If FileIO.FileSystem.DirectoryExists(Server.MapPath("~/images/") & Request.QueryString("sid")) Then
FileIO.FileSystem.DeleteDirectory(Server.MapPath("~/images/") & Request.QueryString("sid"), FileIO.DeleteDirectoryOption.DeleteAllContents)
End If

Alireza_Salehi
دوشنبه 17 خرداد 1389, 21:24 عصر
در صورت پاک کردن یک پوشه در پوشه اصلی وب سایت Application شما ریستارت خواهد شد که طبعا Session ها هم از بین می روند .

aref1364
جمعه 21 خرداد 1389, 09:37 صبح
در صورت پاک کردن یک پوشه در پوشه اصلی وب سایت Application شما ریستارت خواهد شد که طبعا Session ها هم از بین می روند .

نمیشه کاری کرد که رستارت نشه؟

چه راهی برای جلوگیری از خروج از پنل پیشنهاد می کنید؟

Alireza_Salehi
جمعه 21 خرداد 1389, 09:58 صبح
این مورد یکی از قابلیت های ASP.NET است که با تغییر در پوشه های داخل وب سایت ریستارت می شود.

تنها راه این است که پوشه مورد نظر داخل وب سایت نباشد.

hamid67fathi
جمعه 21 خرداد 1389, 12:15 عصر
ممنون دوستان که رهنمايی ميکنيد،مشکل از جايی ناشی ميشد که که يک فايل رو برای خواندن محتويات باز کرده بودم و در آخر فراموش کرده بودم که ببندمش.

aref1364
جمعه 21 خرداد 1389, 20:36 عصر
متشکرم. مشکل به این ترتیب حل شد:

در فایل کد مرجع از سابروتین زیر استفاده کردم:


'Disable session expiration on directory deletion
Public Sub FixAppDomainRestartWhenTouchingFiles()

Dim p As System.Reflection.PropertyInfo = GetType(HttpRuntime).GetProperty("FileChangesMonitor", Reflection.BindingFlags.Public Or Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.Static)

Dim o As Object = p.GetValue(Nothing, Nothing)

Dim f As System.Reflection.FieldInfo = o.GetType.GetField("_dirMonSubdirs", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic Or Reflection.BindingFlags.IgnoreCase)

Dim monitor As Object = f.GetValue(o)

Dim m As System.Reflection.MethodInfo = monitor.GetType.GetMethod("StopMonitoring", Reflection.BindingFlags.Instance Or Reflection.BindingFlags.NonPublic)

m.Invoke(monitor, New Object() {})

End Sub

در فایل global.asax و در قسمت Application_Start اون رو فراخوانی کردم:


FixAppDomainRestartWhenTouchingFiles()