سلام
اگر شما نخواهید یک سیستم کنترل دسترسی پیاده سازی کنید ، که کار مفصلی رو هم میطلبه. (مدیریت نشست ها سمت سرویس باید باشه و سیستم به صورت متمرکز کار کنه) باید مسیر زیر رو طی کنید:

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