ورود هر کاربر روی فقط یک مرورگر در Asp.Net Core
با عرض سلام و خسته نباشید خدمت برنامه نویسان عزیز
ما توی یک پروژه نیاز داریم تا هر کابر که لاگین می کنه فقط با همون مرورگر بتونه کار بکنه و دیگه نتونه جای دیگه ای استفاده کنه
درحال حاضر این فرایند با کوکی داره اتفاق می افته ولی موضوع ما این هست که کوکی پاک میشه و تضمینی نیست که باقی بمونه و نکته مهم این هست که کاربر می تونه روی لپ تاپ و روی گوشی هم لاگین کنه پس موقعیت جغرافیایی به کار ما نمیاد
ممنون میشم اگر کسی پیشنهادی به غیر از کوکی و سشن بده
پاسخ هوش مصنوعی
برای محدود کردن ورود هر کاربر به یک مرورگر در Asp.Net Core به جای استفاده از کوکی یا سشن، می توانید از توکن های دسترسی (Access Tokens) استفاده کنید. در این روش، پس از لاگین کاربر، یک توکن منحصر به فرد برای آن کاربر و مرورگر تولید می شود و این توکن باید برای هر درخواست ارسال شود. همچنین اطلاعات مربوط به توکن ها می تواند در پایگاه داده ذخیره شود و هنگام ورود مجدد کاربر بررسی شود.
در زیر یک روش ساده برای پیاده سازی این کار آورده شده است:
public class UserSessionService
{
    private readonly ApplicationDbContext _context;
    public UserSessionService(ApplicationDbContext context)
    {
        _context = context;
    }
    public async Task CreateSessionAsync(string userId)
    {
        var existingSession = await _context.UserSessions
            .FirstOrDefaultAsync(s => s.UserId == userId);
        if (existingSession != null)
        {
            // در صورت وجود سشن قبلی، آن را حذف می کنیم
            _context.UserSessions.Remove(existingSession);
            await _context.SaveChangesAsync();
        }
        // توکن جدید برای کاربر تولید می کنیم
        string token = Guid.NewGuid().ToString();
        var newSession = new UserSession
        {
            UserId = userId,
            Token = token,
            CreatedAt = DateTime.UtcNow
        };
        await _context.UserSessions.AddAsync(newSession);
        await _context.SaveChangesAsync();
        return token;
    }
    public async Task ValidateSessionAsync(string userId, string token)
    {
        var session = await _context.UserSessions
            .FirstOrDefaultAsync(s => s.UserId == userId && s.Token == token);
        return session != null;
    }
}
  شما باید جدولی در پایگاه داده برای ذخیره سازی سشن های کاربر ایجاد کنید:
public class UserSession
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public string Token { get; set; }
    public DateTime CreatedAt { get; set; }
}
سپس در هنگام ورود کاربر، از متد CreateSessionAsync استفاده کنید تا توکن جدیدی برای کاربر تولید و ذخیره شود و درخواستی که به سرور ارسال می شود باید توکن را به همراه داشته باشد. با استفاده از متد ValidateSessionAsync می توانید بررسی کنید که آیا توکن معتبر است یا خیر.
در این روش، هر کاربر فقط می تواند با یک مرورگر و توکن منحصر به فرد وارد سیستم شود و در ورودهای جدید، سشن های قبلی به طور خودکار حذف می شوند.
برای انجام این کار یه سری پیشنهاداتی هست که باید با توجه به پروژتون انجام بدید. لینک زیر رو مطالعه کنید.
جلوگیری از ورود همزمان (لاگین) چند کاربر با یک نام کاربری در Asp.net Core
می تونید از JWT استفاده کنید. در این روش برای لاگین یک Token ایجاد می شود. شما کنترل کنید تا زمانی که توکن فعال هست دیگه کسی نتونه لاگین انجام بده. البته این جمله بنده خیلی کلی هست و باید در موردش جستجو کنید.
ابزارهایی مثل Azure هم این امکان رو برای شما فراهم میکنن ولی متاسفانه سرویس دهی در ایران ندارن.
لینک زیر هم در این مورد یه سری کد نوشته
prevent multiple login in asp.net core 2
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2
 
                         
                         
                        