سلام
اگر شما نخواهید یک سیستم کنترل دسترسی پیاده سازی کنید ، که کار مفصلی رو هم میطلبه. (مدیریت نشست ها سمت سرویس باید باشه و سیستم به صورت متمرکز کار کنه) باید مسیر زیر رو طی کنید:
اما راه حل دم دستی ، شما یک ماژول با تعدادی پراپرتی تعریف می کنید که یکیش زمان آخرین فعالیت کاربر هست (نمونه زیر ، ساده ترین حالت هست)، شما میتونید با هر کاری که کاربر در برنامه انجام داد ، زمان آخرین فعالیت رو آپدیت کنید و یک تایمر وظیفه کنترل اون زمان رو داشته باشه ، مثلا هر یک دقیقه چک کنه و اگر فاصله بیش از 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 دقیقه بسته میشه ، به علت اینکه تایمر هر یک دقیقه چک میکنه که مشکلی هم نیست البته)