آنچه در این مقاله میخوانید [پنهانسازی]
عنوان سئو:
Session در Django برای نگهداری اطلاعات کاربر بین درخواستهای مختلف استفاده میشود. وقتی کاربر وارد سایت میشود، Django با استفاده از Session اطلاعات او را ذخیره میکند تا در Request های بعدی بتواند کاربر را شناسایی کند. این سیستم یکی از مهمترین بخشهای Authentication و مدیریت کاربران در Django محسوب میشود.
سرفصل های مقاله
- Session در Django چیست؟
- Session در Django چگونه کار میکند؟
- ساختار Session در Django
- ذخیره اطلاعات داخل Session
- خواندن اطلاعات Session
- حذف اطلاعات Session
- چرا Session در Django مهم است؟
- Session ID چیست؟
- آیا اطلاعات داخل Cookie ذخیره میشوند؟
- انواع Session Backend در Django
- Database Session
- Cache Session
- File Session
- Signed Cookie Session
- Session در Authentication Django
- Logout چگونه کار میکند؟
- مشکل رایج Session در Django
- منقضی شدن Session
- تنظیم زمان Session
- مشکل Session در API ها
- مشکل CSRF و Session
- مشکل در Redis Session
- اشتباهات رایج برنامه نویسان
- ذخیره داده سنگین داخل Session
- ذخیره اطلاعات حساس
- استفاده زیاد از Session
- تنظیم نکردن Expire
- روشهای افزایش امنیت Session در Django
- فعال کردن HTTPS
- جلوگیری از دسترسی JavaScript
- تغییر Session بعد از Login
- استفاده از زمان انقضای مناسب
- روش جلوگیری از مشکلات Session
- Session ها را سبک نگه دارید
- Backend مناسب انتخاب کنید
- تنظیمات امنیتی را جدی بگیرید
- رفتار Session را تست کنید
- جمع بندی
Session در Django چیست؟
پروتکل HTTP به صورت پیش فرض Stateless است.
یعنی سرور بعد از هر Request اطلاعات کاربر را فراموش میکند.
مثلا:
- کاربر Login میکند
- صفحه جدید باز میکند
- سرور باید دوباره او را بشناسد
اینجا Session وارد عمل میشود.
Django با Session اطلاعات موقت کاربر را نگهداری میکند تا بین درخواستهای مختلف قابل استفاده باشند.
Session در Django چگونه کار میکند؟
وقتی کاربر وارد سایت میشود:
- Django یک Session ایجاد میکند
- یک Session ID میسازد
- Session ID داخل Cookie مرورگر ذخیره میشود
بعد در هر Request:
- مرورگر Session ID را ارسال میکند
- Django اطلاعات مربوط به آن Session را پیدا میکند
ساختار Session در Django
معمولا اطلاعات Session داخل:
- Database
- Cache
- File
- Redis
ذخیره میشوند.
به صورت پیش فرض Django از دیتابیس استفاده میکند.
جدول مربوطه:
django_session
ذخیره اطلاعات داخل Session
مثلا:
request.session['username'] = 'Ali'
حالا مقدار username داخل Session ذخیره میشود.
خواندن اطلاعات Session
مثلا:
username = request.session.get('username')
اگر مقدار وجود داشته باشد برگردانده می شود.
حذف اطلاعات Session
مثلا:
del request.session['username']
یا حذف کامل Session:
request.session.flush()
چرا Session در Django مهم است؟
خیلی از قابلیتهای مهم Django بر پایه Session کار میکنند.
مثلا:
- Login
- سبد خرید
- پنل کاربری
- پیام های موقت
- ذخیره تنظیمات کاربر
بدون Session مدیریت کاربر بسیار سخت میشود.
Session ID چیست؟
Session ID شناسهای است که کاربر را مشخص میکند.
مثلا مرورگر چنین Cookie ای ذخیره میکند:
sessionid=abc123xyz
این مقدار به Django کمک می کند Session مربوط به کاربر را پیدا کند.
آیا اطلاعات داخل Cookie ذخیره میشوند؟
به صورت پیش فرض خیر.
معمولا فقط Session ID داخل Cookie قرار میگیرد.
اطلاعات واقعی داخل سرور ذخیره میشوند.
این روش امنیت بیشتری دارد.
انواع Session Backend در Django
Django چند روش مختلف برای ذخیره Session دارد.
Database Session
حالت پیش فرض Django است.
مزایا:
- ساده
- پایدار
- قابل اطمینان
معایب:
- فشار بیشتر روی دیتابیس
Cache Session
مثلا با Redis:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
مزایا:
- سریعتر
- مناسب پروژههای بزرگ
معایب:
- اگر Cache پاک شود Session ها حذف میشوند
File Session
ذخیره Session داخل فایل:
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
معمولا کمتر استفاده میشود.
Signed Cookie Session
در این حالت اطلاعات Session داخل Cookie ذخیره میشوند.
مزایا:
- فشار کمتر روی سرور
معایب:
- حجم محدود
- امنیت حساستر
Session در Authentication Django
وقتی کاربر Login میکند:
login(request, user)
Django اطلاعات کاربر را داخل Session ذخیره میکند.
بعد در هر Request:
- Session بررسی میشود
- کاربر شناسایی میشود
Logout چگونه کار میکند؟
مثلا:
logout(request)
این دستور Session را پاک میکند.
بعد کاربر دیگر Authenticate شده نیست.
مشکل رایج Session در Django
منقضی شدن Session
گاهی کاربر ناگهان Logout میشود.
علت معمولا:
- پایان زمان Session
- پاک شدن Cookie
- Restart شدن Cache
است.
تنظیم زمان Session
مثلا:
SESSION_COOKIE_AGE = 3600
یعنی Session بعد از یک ساعت منقضی شود.
مشکل Session در API ها
در پروژههای:
- React
- Vue
- Mobile App
گاهی Session به درستی ارسال نمیشود.
مخصوصا وقتی:
- Domain جدا باشد
- CORS فعال باشد
- Cookie ارسال نشود
مشکل CSRF و Session
Session و CSRF به هم مرتبط هستند.
اگر Cookie ارسال نشود:
- Session شناسایی نمیشود
- CSRF خطا میدهد
مشکل در Redis Session
اگر Redis Restart شود:
- Session ها حذف میشوند
- کاربران Logout میشوند
برای پروژههای واقعی باید Persistence تنظیم شود.
اشتباهات رایج برنامه نویسان
ذخیره داده سنگین داخل Session
مثلا:
request.session['products'] = huge_data
این کار اشتباه است.
Session باید سبک باشد.
ذخیره اطلاعات حساس
نباید:
- رمز عبور
- Token حساس
- اطلاعات مالی
داخل Session ذخیره شوند.
استفاده زیاد از Session
بعضی پروژهها همه چیز را داخل Session ذخیره میکنند.
این موضوع:
- RAM را مصرف میکند
- Performance را خراب میکند
تنظیم نکردن Expire
اگر زمان انقضا درست تنظیم نشود:
- Session خیلی زود حذف میشود
- یا بیش از حد طولانی باقی میماند
روشهای افزایش امنیت Session در Django
فعال کردن HTTPS
مثلا:
SESSION_COOKIE_SECURE = True
این کار باعث می شود Cookie فقط روی HTTPS ارسال شود.
جلوگیری از دسترسی JavaScript
مثلا:
SESSION_COOKIE_HTTPONLY = True
این کار امنیت را بیشتر میکند.
تغییر Session بعد از Login
برای جلوگیری از Session Fixation بهتر است Session جدید ساخته شود.
Django این کار را معمولا خودکار انجام میدهد.
استفاده از زمان انقضای مناسب
نباید Session بیش از حد طولانی فعال بماند.
روش جلوگیری از مشکلات Session
Session ها را سبک نگه دارید
فقط داده ضروری ذخیره کنید.
Backend مناسب انتخاب کنید
برای پروژه های بزرگ Redis انتخاب بهتری است.
تنظیمات امنیتی را جدی بگیرید
بخصوص:
- Secure Cookie
- HttpOnly
- Expire Time
رفتار Session را تست کنید
مخصوصا در:
- Login
- Logout
- Refresh Token
- Mobile Browser
باید تست کامل انجام شود.
جمع بندی
Session در Django یکی از مهمترین بخشهای مدیریت کاربران و Authentication است. Django با استفاده از Session اطلاعات کاربر را بین Request های مختلف نگهداری میکند و از طریق Session ID کاربران را شناسایی میکند. اگر Session ها درست مدیریت شوند، هم امنیت پروژه بهتر میشود و هم تجربه کاربری پایدارتر خواهد بود.





