Session چیست؟
در مقاله قبل با Cookie آشنا شدیم و دیدیم که مرورگر میتواند اطلاعات کوچکی را ذخیره کرده و در درخواستهای بعدی برای سرور ارسال کند.
اما آیا تمام اطلاعات کاربران باید داخل Cookie ذخیره شوند؟
پاسخ این سؤال معمولاً خیر است.
برای نگهداری اطلاعات مهمتر و حساستر، بیشتر وبسایتها از مفهومی به نام Session استفاده میکنند.
Session روشی برای نگهداری اطلاعات کاربران در سمت سرور است تا وضعیت آنها بین Requestهای مختلف حفظ شود.
به زبان ساده، Session مانند یک پرونده موقت برای هر کاربر است که روی سرور نگهداری میشود.
چرا Session به وجود آمد؟
همانطور که در مقاله HTTP و REST API یاد گرفتیم، پروتکل HTTP یک پروتکل Stateless است.
این یعنی هر Request بهصورت مستقل پردازش میشود و سرور بهصورت پیشفرض هیچ اطلاعی از درخواستهای قبلی ندارد.
در نتیجه، اگر کاربری وارد حساب خود شود و سپس صفحه دیگری را باز کند، سرور بهتنهایی نمیتواند تشخیص دهد که این همان کاربر قبلی است.
Session این مشکل را حل میکند و به سرور اجازه میدهد اطلاعات هر کاربر را بین درخواستهای مختلف نگهداری کند.
Session چگونه کار میکند؟
عملکرد Session معمولاً در چند مرحله انجام میشود.
- کاربر وارد وبسایت میشود.
- سرور یک Session جدید ایجاد میکند.
- برای این Session یک شناسه منحصربهفرد (Session ID) ساخته میشود.
- Session ID معمولاً داخل یک Cookie در مرورگر ذخیره میشود.
- در درخواستهای بعدی، مرورگر Session ID را برای سرور ارسال میکند.
- سرور با استفاده از Session ID اطلاعات مربوط به همان کاربر را پیدا میکند.
به این ترتیب، اطلاعات اصلی روی سرور باقی میمانند و تنها شناسه Session بین مرورگر و سرور جابهجا میشود.
Session ID چیست؟
Session ID شناسهای یکتا است که هر Session را از سایر Sessionها متمایز میکند.
این شناسه معمولاً رشتهای تصادفی و غیرقابل حدس است.
وقتی مرورگر این شناسه را در هر Request ارسال میکند، سرور متوجه میشود که درخواست متعلق به کدام Session است.
در واقع، Session ID مانند شماره پروندهای است که به سرور کمک میکند اطلاعات صحیح را برای هر کاربر پیدا کند.
یک مثال ساده
فرض کنید وارد پنل کاربری یک فروشگاه اینترنتی شدهاید.
پس از ورود، محصولات مختلف را مشاهده میکنید، سفارش ثبت میکنید و وارد صفحه پروفایل میشوید.
در تمام این مدت، سرور باید بداند که تمام این درخواستها متعلق به یک کاربر مشخص هستند.
این کار با استفاده از Session انجام میشود.
سرور اطلاعات Session را نگهداری میکند و مرورگر تنها Session ID را در هر Request ارسال میکند.
چه اطلاعاتی داخل Session ذخیره میشود؟
برخلاف Cookie که معمولاً اطلاعات کمی را نگهداری میکند، Session میتواند اطلاعات بیشتری را در سمت سرور ذخیره کند.
برای مثال، اطلاعات زیر ممکن است داخل Session قرار بگیرند:
- شناسه کاربر
- وضعیت ورود کاربر
- سطح دسترسی
- اطلاعات سبد خرید
- تنظیمات موقت کاربر
- اطلاعات موردنیاز برای ادامه یک فرآیند
از آنجا که این اطلاعات روی سرور نگهداری میشوند، کنترل و مدیریت آنها سادهتر و امنتر است.
آیا Session بدون Cookie هم کار میکند؟
در بیشتر وبسایتها، Session برای شناسایی کاربر از Cookie استفاده میکند.
یعنی مرورگر تنها Session ID را داخل Cookie ذخیره میکند و در درخواستهای بعدی برای سرور میفرستد.
البته روشهای دیگری نیز برای ارسال Session ID وجود دارند، اما امروزه استفاده از Cookie رایجترین و استانداردترین روش است.
Session چه کاربردهایی دارد؟
Session فقط برای ورود کاربران استفاده نمیشود.
این فناوری در بخشهای مختلف توسعه وب کاربرد دارد.
- مدیریت ورود کاربران
- نگهداری وضعیت احراز هویت
- ذخیره اطلاعات موقت کاربران
- مدیریت سبد خرید
- کنترل سطح دسترسی کاربران
- پیگیری مراحل انجام یک فرآیند چندمرحلهای
در بخش بعدی مقاله، تفاوت Session و Cookie، محل ذخیره اطلاعات، مزایا و معایب Session، نحوه مدیریت Session در Django و نکات امنیتی مربوط به آن را بررسی خواهیم کرد.
تفاوت Session و Cookie چیست؟
Session و Cookie دو مفهوم مرتبط هستند، اما وظایف متفاوتی دارند و نباید آنها را یکسان در نظر گرفت.
مهمترین تفاوت این دو، محل ذخیره اطلاعات است.
در Cookie، اطلاعات در مرورگر کاربر ذخیره میشوند.
اما در Session، اطلاعات اصلی روی سرور قرار دارند و مرورگر معمولاً فقط شناسه Session یا همان Session ID را نگهداری میکند.
به همین دلیل، Session برای نگهداری اطلاعات مهم و حساس گزینه مناسبتری محسوب میشود.
Session و Cookie چگونه با هم کار میکنند؟
در بیشتر وبسایتهای امروزی، Session و Cookie در کنار یکدیگر استفاده میشوند.
هنگامی که کاربر وارد حساب کاربری خود میشود، سرور یک Session ایجاد میکند.
سپس شناسه آن Session را داخل یک Cookie برای مرورگر ارسال میکند.
در درخواستهای بعدی، مرورگر همین Cookie را ارسال میکند و سرور با استفاده از Session ID اطلاعات مربوط به کاربر را از Session پیدا میکند.
بنابراین، Cookie و Session معمولاً مکمل یکدیگر هستند، نه جایگزین هم.
مزایای Session
Session نسبت به ذخیره اطلاعات در Cookie مزایای مهمی دارد.
- اطلاعات اصلی روی سرور نگهداری میشوند.
- کاربر به دادههای Session دسترسی مستقیم ندارد.
- مدیریت اطلاعات حساس سادهتر است.
- حجم اطلاعات محدود به ظرفیت Cookie نیست.
- در صورت نیاز، سرور میتواند Session را در هر زمان حذف یا غیرفعال کند.
به همین دلیل، بیشتر سیستمهای ورود کاربران بر پایه Session پیادهسازی میشوند.
محدودیتهای Session
در کنار مزایا، Session محدودیتهایی نیز دارد.
از آنجا که اطلاعات روی سرور ذخیره میشوند، هر Session بخشی از منابع سرور را مصرف میکند.
در وبسایتهایی که میلیونها کاربر همزمان دارند، مدیریت تعداد زیاد Sessionها اهمیت زیادی پیدا میکند.
به همین دلیل، در پروژههای بزرگ معمولاً از روشهای مختلفی برای ذخیره و مدیریت Sessionها استفاده میشود.
Session چه زمانی پایان مییابد؟
Session دائمی نیست.
هر Session معمولاً دارای زمان انقضا است.
پس از پایان این زمان یا زمانی که کاربر از حساب خود خارج شود، Session حذف یا غیرفعال میشود.
در بسیاری از وبسایتها، اگر کاربر برای مدت مشخصی فعالیتی نداشته باشد، Session بهطور خودکار منقضی میشود و لازم است دوباره وارد حساب کاربری خود شود.
آیا Session امن است؟
اگر بهدرستی پیادهسازی شود، Session یکی از امنترین روشهای مدیریت وضعیت کاربران محسوب میشود.
دلیل این موضوع آن است که اطلاعات اصلی روی سرور باقی میمانند و فقط Session ID بین مرورگر و سرور جابهجا میشود.
البته امنیت Session تا حد زیادی به محافظت از Session ID نیز وابسته است.
به همین دلیل، وبسایتهای معتبر معمولاً از HTTPS و ویژگیهای امنیتی Cookie مانند HttpOnly، Secure و SameSite برای محافظت از Session ID استفاده میکنند.
Session در Django چگونه مدیریت میشود؟
Django بهصورت پیشفرض یک سیستم کامل برای مدیریت Sessionها در اختیار توسعهدهندگان قرار میدهد.
پس از ورود موفق کاربر، Django یک Session ایجاد میکند و Session ID را داخل Cookie قرار میدهد.
در درخواستهای بعدی، این شناسه به سرور ارسال میشود و Django اطلاعات Session مربوط به همان کاربر را بازیابی میکند.
در نتیجه، توسعهدهنده معمولاً نیازی ندارد فرآیند ایجاد یا مدیریت Session را از ابتدا پیادهسازی کند.
Sessionها در کجا ذخیره میشوند؟
محل ذخیره Session به تنظیمات پروژه بستگی دارد.
در بسیاری از پروژهها، Sessionها داخل پایگاه داده ذخیره میشوند.
در برخی پروژهها نیز ممکن است از حافظه، فایل یا سرویسهایی مانند Redis برای ذخیره Session استفاده شود.
انتخاب محل ذخیره Session به عواملی مانند تعداد کاربران، سرعت موردنیاز و معماری پروژه بستگی دارد.
آیا Session فقط در وبسایتها استفاده میشود؟
خیر.
اگرچه Session بیشتر در برنامههای تحت وب شناخته شده است، اما مفهوم نگهداری وضعیت کاربر در بسیاری از سیستمهای نرمافزاری وجود دارد.
برای مثال، برخی پنلهای مدیریتی، سامانههای سازمانی و حتی بعضی APIها نیز از Session برای مدیریت کاربران استفاده میکنند.
در بخش پایانی مقاله، تفاوت Session با JWT، اشتباهات رایج در استفاده از Session، بهترین روشهای مدیریت Session و دلایلی که هر توسعهدهنده Backend باید این مفهوم را بهخوبی بشناسد بررسی خواهیم کرد.
Session یا JWT؛ کدام بهتر است؟
یکی از پرسشهای رایج در توسعه Backend این است که برای مدیریت ورود کاربران باید از Session استفاده کرد یا JWT.
پاسخ این سؤال به نوع پروژه بستگی دارد و نمیتوان یکی را همیشه بهتر از دیگری دانست.
Session معمولاً برای وبسایتهای سنتی، پنلهای مدیریتی و پروژههایی که سرور وضعیت کاربران را مدیریت میکند، گزینه مناسبی است.
در مقابل، JWT بیشتر در REST APIها، معماریهای بدون وضعیت (Stateless) و اپلیکیشنهای موبایل کاربرد دارد.
هر دو روش مزایا و محدودیتهای خاص خود را دارند و انتخاب بین آنها به نیازهای پروژه بستگی دارد.
اشتباهات رایج در استفاده از Session
در برخی پروژهها، استفاده نادرست از Session میتواند باعث کاهش امنیت یا ایجاد مشکلات عملکردی شود.
برخی از اشتباهات رایج عبارتاند از:
- نگهداری اطلاعات غیرضروری و حجیم داخل Session
- تنظیم نکردن زمان انقضای مناسب برای Session
- استفاده نکردن از HTTPS هنگام ارسال Session ID
- عدم استفاده از ویژگیهای امنیتی Cookie مانند HttpOnly و Secure
- عدم حذف Session پس از خروج کاربر از حساب
رعایت این نکات باعث میشود امنیت و پایداری سیستم افزایش پیدا کند.
اگر Session حذف شود چه اتفاقی میافتد؟
اگر Session از روی سرور حذف شود یا زمان اعتبار آن به پایان برسد، سرور دیگر نمیتواند کاربر را شناسایی کند.
در این حالت، کاربر معمولاً از حساب کاربری خود خارج میشود و برای ادامه استفاده از بخشهای محافظتشده سایت باید دوباره وارد حساب خود شود.
این رفتار در بسیاری از وبسایتها کاملاً طبیعی است و یکی از راههای افزایش امنیت محسوب میشود.
چرا Session برای امنیت اهمیت دارد؟
یکی از مهمترین مزایای Session این است که اطلاعات حساس روی سرور باقی میمانند.
مرورگر فقط شناسه Session را نگهداری میکند و هیچ دسترسی مستقیمی به اطلاعات داخلی Session ندارد.
این موضوع احتمال افشای اطلاعات حساس را کاهش میدهد و مدیریت دسترسی کاربران را آسانتر میکند.
البته امنیت Session تنها به نحوه ذخیره اطلاعات وابسته نیست و محافظت از Session ID نیز اهمیت زیادی دارد.
Session در پروژههای واقعی
تقریباً تمام وبسایتهایی که امکان ورود کاربران را فراهم میکنند، از نوعی سیستم مدیریت نشست استفاده میکنند.
برای مثال، پس از ورود به پنل مدیریت یک فروشگاه اینترنتی، سامانه آموزشی یا شبکه اجتماعی، تا زمانی که Session معتبر باشد نیازی به ورود مجدد ندارید.
اگر از حساب خود خارج شوید یا Session منقضی شود، برای دسترسی دوباره باید فرآیند ورود را تکرار کنید.
این رفتار نتیجه استفاده از Session در مدیریت کاربران است.
Session در Django
Django یکی از کاملترین سیستمهای مدیریت Session را در اختیار توسعهدهندگان قرار میدهد.
پس از احراز هویت موفق، Django یک Session ایجاد کرده و اطلاعات مربوط به آن را روی سرور ذخیره میکند.
مرورگر نیز Session ID را در Cookie نگهداری کرده و در Requestهای بعدی ارسال میکند.
علاوه بر این، Django امکاناتی برای تعیین زمان انقضای Session، خروج کاربران، حذف Sessionها و مدیریت امنیت آنها فراهم کرده است.
به همین دلیل، در بسیاری از پروژههای مبتنی بر Django نیازی به پیادهسازی دستی سیستم مدیریت نشست وجود ندارد.
چرا یادگیری Session برای برنامهنویسان ضروری است؟
تقریباً هر برنامه تحت وب که دارای ورود کاربران باشد، به نوعی از Session یا فناوریهای مشابه استفاده میکند.
شناخت نحوه عملکرد Session به توسعهدهندگان کمک میکند فرآیند احراز هویت، مدیریت کاربران و کنترل دسترسی را بهتر درک کنند.
همچنین بسیاری از مفاهیم پیشرفتهتر مانند JWT، OAuth و سیستمهای احراز هویت مدرن نیز بر پایه درک صحیح مفهوم Session آسانتر قابل یادگیری هستند.
جمعبندی
Session روشی برای نگهداری اطلاعات کاربران در سمت سرور است که به وبسایت اجازه میدهد وضعیت کاربران را بین Requestهای مختلف حفظ کند.
در بیشتر پروژهها، تنها شناسه Session در Cookie مرورگر ذخیره میشود و اطلاعات اصلی روی سرور باقی میمانند. این ویژگی باعث میشود Session نسبت به ذخیره مستقیم اطلاعات در مرورگر، امنیت بیشتری داشته باشد.
آشنایی با Session، تفاوت آن با Cookie، نحوه مدیریت آن در فریمورکهایی مانند Django و رعایت نکات امنیتی مربوط به آن، از مهارتهای پایهای هر توسعهدهنده Backend محسوب میشود.
سؤالات متداول
Session چیست؟
Session روشی برای نگهداری اطلاعات کاربران در سمت سرور است تا وضعیت آنها بین درخواستهای مختلف حفظ شود.
تفاوت Session و Cookie چیست؟
در Session اطلاعات اصلی روی سرور ذخیره میشوند، اما در Cookie اطلاعات در مرورگر کاربر قرار میگیرند. معمولاً فقط شناسه Session داخل Cookie ذخیره میشود.
Session ID چیست؟
Session ID شناسهای یکتا است که هر Session را مشخص میکند و به سرور کمک میکند اطلاعات مربوط به همان کاربر را پیدا کند.
آیا Session امنتر از Cookie است؟
از آنجا که اطلاعات اصلی در Session روی سرور نگهداری میشوند، معمولاً برای مدیریت اطلاعات حساس گزینه امنتری نسبت به ذخیره مستقیم دادهها در Cookie محسوب میشود.
مطالعه بیشتر
قدم بعدی چیست؟
اکنون که با Session آشنا شدید، در مقاله بعدی بررسی میکنیم Authentication چیست، فرآیند احراز هویت چگونه انجام میشود، چه تفاوتی با Authorization دارد و وبسایتها چگونه هویت کاربران را تأیید میکنند.
نظرات
هنوز نظری ثبت نشده؛ اولین نفر باشید.
ثبت نظر
در حال پاسخ به