PDA

View Full Version : انقضای برنامه



code_project
شنبه 17 آذر 1397, 10:03 صبح
سلام دوستان
من یه برنامه ویندوزی دارم. میخوام کاری کنم که اگه کاربر لاگین کرد و به مدت 5 دقیقه از زمان لاگینش گذشت و در برنامه کاری انجام نداد، برنامه بسته بشه و نیاز به لاگین مجدد باشه. ممنون میشم کمکم کنید.

محمد آشتیانی
شنبه 17 آذر 1397, 13:37 عصر
سلام
اگر شما نخواهید یک سیستم کنترل دسترسی پیاده سازی کنید ، که کار مفصلی رو هم میطلبه. (مدیریت نشست ها سمت سرویس باید باشه و سیستم به صورت متمرکز کار کنه) باید مسیر زیر رو طی کنید:

اما راه حل دم دستی ، شما یک ماژول با تعدادی پراپرتی تعریف می کنید که یکیش زمان آخرین فعالیت کاربر هست (نمونه زیر ، ساده ترین حالت هست)، شما میتونید با هر کاری که کاربر در برنامه انجام داد ، زمان آخرین فعالیت رو آپدیت کنید و یک تایمر وظیفه کنترل اون زمان رو داشته باشه ، مثلا هر یک دقیقه چک کنه و اگر فاصله بیش از 5 دقیقه بود برنامه رو با نمایش پیغامی ببنده

برای مثال چیزی شبیه به این ماژول

Imports System.Timers


Module UserSession


#Region "Private Fields"


Private ReadOnly SessionTimer As Timer


#End Region

#Region "Ctor/Dtor"


Sub New()


SessionTimer = New Timer()
AddHandler SessionTimer.Elapsed, AddressOf OnTimedEvent


'Set to one minute
SessionTimer.Interval = 60000
SessionTimer.Enabled = True
SessionTimer.Start()


End Sub


#End Region


#Region "Event Handlers"


Private Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)


If (DateTime.Now - LastActivity).TotalMinutes > 5 Then
MessageBox.Show("Session has been expired, please login again")
Application.Exit()
End If


End Sub


#End Region


#Region "Properties"


Property Username() As String


Property LoginTime() As DateTime


Property LastActivity() As DateTime


#End Region


End Module


توی فرم لاگین ، بعد از اعتبار سنجی که انجام دادید (چک کردن صحت نام کاربری و رمز عبور) ، مقادیر این ماژول رو پر کنید

UserSession.Username = TxtUsername.Text
UserSession.LoginTime = DateTime.Now
UserSession.LastActivity = DateTime.Now


الان بعد از 5 دقیقه ، اگر مقدار LastActivity رو آپدیت نکنید برنامتون بسته میشه

حالا توی برنامه مثلا با کلیک روی یک دکمه باید مقدار فیلد مذکور رو آپدیت کنید

Private Sub BtnDoSomething_Click(sender As Object, e As EventArgs) Handles BtnDoSomething.Click
UserSession.LastActivity = DateTime.Now
End Sub


خب؟ حالا برنامه تا 5 دقیقه بعد از کلیک روی دکمه DoSomething باز میمونه (البته بسته به اینکه چه زمانی آپدیت انجام بشه ، حداقل یک ثانیه و حداکثر 59 ثانیه بعد از گذشت 5 دقیقه بسته میشه ، به علت اینکه تایمر هر یک دقیقه چک میکنه که مشکلی هم نیست البته)

code_project
شنبه 17 آذر 1397, 13:46 عصر
استاد آشتیانی عزیز ممنون بابت وقتی که گذاشتید. همه چیز عالیه. فقط یه سئوال من چطوری میتونم بگم اگه ماوس حرکت کرد یا یه کلید از کیبورد فشرده شد، اون مقدار آپدیت بشه و عملیات خروج از برنامه صورت نگیره. دقیقا یه چیزی شبیه اسکرین سیور ویندوز