در این مقاله ابتدا در مورد سشن(session) و کوکی صحبت میکنم و در انتها یک مثال کاربردی از سشن(session) در جنگو رو توضیح می دهم
سشن(session) چیست ؟
سشن(session) مکانیزمی است که توسط جنگو برای پیگیری وضعیت بین سایت و یک مروگر خاص استفاده می شود .
سشن(session) به شما این امکان را می دهد که داده های دلخواه را در هر مرورگر ذخیره کنید و هر زمان که مرورگر متصل شد، این داده ها را در اختیار سایت قرار دهید.
تمام ارتباطات بین مرورگرهای وب و سرورها از طریق HTTP است (stateless) است. این واقعیت که پروتکل (stateless) است به این معنی است که پیامهای بین کلاینت و سرور کاملاً مستقل از یکدیگر هستند - هیچ مفهومی از "توالی" یا رفتار مبتنی بر درخواست قبلی وجود ندارد. به خاطر (stateless) بودن ارتباط ، ما از سشن(session) استفاده میکنیم تا بتوانیم توالی از درخواست و یا درخواستی بر اساس درخواست های قبلی به سمت سرور ارسال کنیم
کوکی چیست؟
کوکی راهی برای برنامه های وب فراهم می کنند تا اطلاعات را در مرورگر کاربر ذخیره کنند. هر بار که کاربر صفحه ای را از همان وب سروری که کوکی ها را ایجاد کرده است، درخواست می کند، این اطلاعات را می توان بازیابی کرد
جنگو یک session id در کوکی مرورگر ذخیره می کند و هربار که مروگر درخواست به سمت سرور ارسال می کند درخواست http حاوی session id هست که در کوکی ذخیره شده و از این طریق جنگو مرورگر را میشناسد و داده های session به صورت پیش فرض در پایگاه داده ذخیره می شوند اما میتوان جنگو را پیکربندی کرد که داده های session در جای دیگری مانند cache یا file یا .... ذخیره شود.
فعال سازی سشن(session)
settings.py
INSTALLED_APPS = [
# …
'django.contrib.sessions',
# …
MIDDLEWARE = [
# …
'django.contrib.sessions.middleware.SessionMiddleware',
#
فرض کنید میخواهیم یک پروژه فروشگاهی بنویسم، هر پروژه فروشگاهی یک بخش کارت خرید دارد که قبل از اینکه سفارسشات نهایی شوند در قسمت کارت خرید ذخیره می شوند.
برای نوشتن کارت خرید باید از سشن(session) ها کمک بگیریم
اول یک فایل به نام cart ایجاد میکنیم و "CART_SESSION_ID="cart را در Settings.py ست میکنیم
و سپس کلاس Cart را می نویسیم که داخل constructor یک آبجکت از request دریافت میکند و سپس اطلاعات کارت خرید را در سشن(session) ذخیره میکند و دو تابع برای اضافه کردن به کارت خرید یا حذف از کارت خرید نوشتیم که هر کالا که به کارت اضافه میشود به صورت یک دیکشنری ذخیره میشود که از ایدی هر کالا به عنوان کلید در دیکشنری استفاده کردیم
cart.py