فرض کنیم یک محصول در فروشگاه فقط ۱ عدد موجودی دارد.
دو کاربر تقریباً همزمان میخواهند آن را بخرند.
---
## سناریو ساده
موجودی محصول: 1
👤 کاربر A وارد صفحه محصول میشود
👤 کاربر B هم همان لحظه وارد همان صفحه میشود
هر دو صفحه نشان میدهد:
📦 موجودی: 1
حالا هر دو تقریباً همزمان روی خرید کلیک میکنند.
---
# اگر سیستم کنترل همزمانی نداشته باشد
اتفاقی که میافتد:
1️⃣ درخواست کاربر A به سرور میرسد
سیستم میبیند موجودی = 1
✅ خرید انجام میشود
📦 موجودی میشود 0
2️⃣ تقریباً همزمان درخواست کاربر B هم میرسد
سیستم هنوز فکر میکند موجودی = 1 (چون همزمان خوانده شده)
✅ خرید او هم انجام میشود
نتیجه:
🧾 دو سفارش ثبت شده
📦 ولی در واقع فقط ۱ محصول وجود داشته
این مشکل را میگویند:
⚠️ Race Condition
(رقابت بین درخواستها)
---
# در سیستم درست چه باید اتفاق بیفتد
سیستم باید اجازه بدهد:
✅ فقط یک نفر خرید موفق داشته باشد
❌ نفر دوم پیام بگیرد
مثلاً:
👤 کاربر A → خرید موفق ✅
👤 کاربر B → پیام:
🚫 "متأسفانه موجودی محصول تمام شده است"
---
# مثال واقعی فروشگاه
موجودی کفش: 1
👤 علی → خرید میکند ✅
👤 رضا → همزمان خرید میکند ❌
سیستم باید بگوید:
📢 "این کالا لحظاتی قبل توسط کاربر دیگری خریداری شد."
---
# چرا این مشکل رخ میدهد؟
چون در برنامهها معمولاً این اتفاق میافتد:
1️⃣ موجودی از دیتابیس خوانده میشود
2️⃣ بررسی میشود آیا > 0 است
3️⃣ بعد سفارش ثبت میشود
اگر دو درخواست خیلی نزدیک به هم بیایند، هر دو مرحله 1 را با همان مقدار انجام میدهند.
---
# نتیجه نهایی
اگر کنترل همزمانی نباشد:
⚠️ ممکن است چند نفر یک کالای آخر را بخرند.
اگر سیستم درست طراحی شده باشد:
✅ فقط یک نفر موفق میشود
❌ بقیه پیام اتمام موجودی میگیرند.
1) سشن (Session)
📌 چیه؟
سشن یک فضای موقت روی سروره که اطلاعات کاربر را فقط تا زمانی که مرورگر باز است یا مدت زمان مشخصی گذشته نشده نگه میدارد.
📌 کوکی دارد؟
بله، اما فقط یک کوکی کوچک نگه میدارد که اسمش سشن آیدی است. اطلاعات اصلی روی سرور است، *نه داخل کوکی*.
📌 مثال:
فرض کن وارد یک فروشگاه اینترنتی شدی و چند کالا را در سبد خرید گذاشتی 🛒
فروشگاه این اطلاعات را در Session ذخیره میکند.
اگر مرورگر را ببندی سبد خرید پاک میشود.
📌 تشبیه:
سشن شبیه رسید شمارهداری است که رستوران بهت میدهد.
تو رسید را داری (کوکی)، ولی غذا داخل آشپزخانه است (سرور). 🍲
-------------------------------------
2) کوکی (Cookie)
📌 چیه؟
کوکی یک فایل کوچک داخل مرورگر کاربر است که توسط سرور ذخیره میشود.
📌 اطلاعات کجا ذخیره میشود؟
خودِ اطلاعات مستقیم داخل مرورگر است.
📌 مثال:
وبسایتی که میخواهد زبان مورد علاقه شما را به یاد داشته باشد 🌍
مثلاً همیشه فارسی را انتخاب میکنی.
این را در کوکی ذخیره میکند.
📌 تشبیه:
کوکی شبیه یادداشتی است که توی جیبت میگذاری تا یادت نره چی دوست داری. 📝
-------------------------------------
3) Identity
📌 چیه؟
Identity یک فریمورک کامل برای مدیریت کاربران است:
- ثبتنام
- ورود
- خروج
- نقشها
- رمز عبور
- ایمیل، شماره موبایل و…
📌 از کوکی استفاده میکند؟
بله. وقتی کاربر لاگین میکند Identity یک کوکی احراز هویت ایجاد میکند تا دفعهی بعد بدون لاگین دوباره شناخته شود.
📌 مثال:
وقتی وارد پنل کاربری یک سایت میشوی 🙂 و دفعه بعدی که وارد میشوی، بدون ورود دوباره کارت را میشناسد — این کار Identity است.
📌 تشبیه:
Identity
مثل سیستم عضویت باشگاه بدنسازی است 💳
یک کارت عضویت داری، و باشگاه تو را میشناسد.
-------------------------------------
4) Authorization
(اتورایزیشن: مجوز دسترسی)
📌 چیه؟
Authorization
مشخص میکند چه کسی به کجا دسترسی دارد.
📌 به چه چیزی وابسته است؟
وابسته به این است که Identity اطلاعات کاربر را شناسایی کرده باشد (از طریق کوکی).
📌 مثال:
- مدیر میتواند وارد پنل مدیریت شود 👨💼
- کاربر عادی نمیتواند 🚫
📌 تشبیه:
Authorization
مثل نگهبان دم در باشگاهه 🧹
کارتت (Identity) را نگاه میکند
اگر مربی باشی، اجازه ورود به اتاق مربیان را میدهد
اگر نباشی، جلو راهت را میگیرد.
-------------------------------------
جمعبندی تفاوتها (با یک مثال کامل)
فرض کن وارد یک سایت میشوی:
1) وارد سایت میشوی و لاگین میکنی
Identity →
تو را شناسایی و تأیید میکند 🙋♂️
Identity →
یک کوکی احراز هویت در مرورگرت میگذارد 🍪
2) میروی به پنل مدیریت
Authorization →
بررسی میکند که آیا نقش تو "مدیر" هست یا نه 🚦
3) چند کالا به سبد اضافه میکنی
Session →
آنها را موقتاً در سرور نگه میدارد 🛒
4) مرورگر را ببندی سبد خرید پاک میشود
Session
تمام میشود ❌
اما چون لاگین بودی، دفعه بعد که بیایی Identity از طریق کوکی تو را دوباره میشناسد ✔️
Areas.zip
حجم:
69.7K
من identity کامل توسط ویزوال استودیو دریافت کردم
پروژه ASP.Net Core MVC (وب و سی شارپ)
این پروژه یک CRUD ساده با ASP.NET Core MVC است که فقط یک جدول (Products) دارد و چند قابلیت مهم فریمورک را نشان میدهد:
- مدیریت کامل محصولات (CRUD) 📦
امکان افزودن، مشاهده و حذف محصول در سیستم.
- استفاده از TagHelper در فرمها و لینکها 🏷
برای ساخت فرمها و لینکهای صفحهها به شکل استاندارد و سادهتر.
- نمایش مرتب تاریخ و قیمت ⏰💰
تاریخ و قیمت محصولات با فرمت مناسب نمایش داده میشوند تا خوانایی بهتر شود.
- استفاده از DropDown با SelectList 🔽
برای انتخاب دستهبندی محصول از یک لیست کشویی استفاده شده است.
- استفاده از ViewComponent 🧩
برای نمایش یک بخش مستقل در صفحه مثل تعداد کل محصولات.
- استفاده از Dependency Injection 🔌
برای مدیریت وابستگیها و دسترسی به سرویسها یا دیتابیس به شکل استاندارد.
- استفاده از Logging 📝
برای ثبت عملیاتها و خطاهای برنامه در لاگ.
- مدیریت خطا ⚠️
در صورت بروز خطا هنگام عملیاتهایی مثل ذخیره یا حذف، برنامه خطا را مدیریت کرده و پیام مناسب به کاربر نمایش میدهد.
✅ در مجموع این پروژه با یک جدول ساده، چند مفهوم مهم ASP.NET Core MVC را بهصورت عملی نشان میدهد.