تفاوت بین localStorage ، Cookies و Session چیست؟


پاسخ 1:

جلسات و ایالات

جلسات ، به طور خاص "جلسات کاربر" ، راهی برای حفظ "وضعیت" در حالی که کاربر در حال تعامل با یک وب سایت یا برنامه است.

این به برنامه ها امکان می دهد اقدامات مختلفی را که کاربر برای دستیابی به نتیجه مورد انتظار انجام داده است ، به خاطر بسپارند.

به عنوان مثال ، به یک برنامه خرید امکان می دهد تا ضمن حفظ "وضعیت سبد خرید" ، مواردی را که کاربر می خواهد بخرد خریداری کند.

به یاد حالتهای ذخیره شده

چنین داده های وضعیتی را می توان در حافظه یا هارد دیسک ، احتمالاً در یک پایگاه داده محلی یا از راه دور یا سیستم پرونده ذخیره کرد.

حالت ها و جلسات سرویس دهنده در مقابل سرور

داده های وضعیت را می توان در طرف مشتری یا در سمت سرور ذخیره کرد.

اگر در سمت سرور ، یا در حافظه نهان یا در یک پایگاه داده با ثبات تر ذخیره شود ، مشتری معمولاً "شناسه جلسه" را به طور مرتب به سرور می دهد (به عنوان مثال برای نام شناسه جلسه: JSESSIONID برای Java EE ، PHPSESSID برای PHP ، ASPSESSIONID برای Microsoft ASP) یا اتصال.sid برای جلسه اکسپرس (node.js).

توجه داشته باشید که سبک معماری انتقال نمایندگی دولت (همچنین با عنوان REST شناخته می شود) توصیه می کند که حالت های جلسات در سمت مشتری ذخیره شود. اگر می خواهید موارد را در سمت سرور ذخیره کنید ، از شما خواسته می شود "منابع" جدیدی ایجاد کنید که نه تنها در یک سرور خاص قابل دسترسی باشند ، بلکه در حالت ایده آل در یک سیستم پایگاه داده توزیع شده ذخیره می شوند.

جلسات مهم

اگر با جلسات سمت سرور کار می کنید ، آگاه باشید که بار درخواست ممکن است در تعداد نمونه های سرور توزیع شود. متعادل کننده بار وظیفه توزیع درخواست را به سرورهایی که منابع کافی (استفاده از حافظه / پردازنده) برای پردازش آنها دارند ، می باشد.

مکانیسمی به نام "جلسه چسبنده" برای یادآوری تعادل کننده بار در نظر گرفته شده است که داده های جلسه در کدام سرور ذخیره شده و سپس فقط درخواست های مرتبط را به این سرور ارسال می کند.

متأسفانه جلسات مهم برای درخواستهای HTTPS ایمن پشتیبانی نمی شوند (در حالی که قطعاً برای امنیت این جلسات باید HTTPS ترجیح داده شود). این می تواند ناکارآمد ، ناامن یا غیرقابل اعتماد باشد. در بهترین تنظیمات ، ممکن است بسیار گران باشد.

به عنوان مثال ، راه حل غرامت مبتنی بر IP برای کاربران در دستگاه های تلفن همراه با استفاده از اتصالات 3G / 4G کارآیی ندارد ، زیرا ممکن است هنگام حمل و نقل آدرس های مختلفی دریافت کنند. اگر سوئیچ Wifi / 3G اتوماتیک را فعال کنید یا یک اتصال اترنت برقرار کنید ، این مسئله بیشتر به کار می رود.

جلسات معتبر یا ناشناس

جلسات ممکن است با یک کاربر معتبر همراه باشد یا نباشد.

علاوه بر سایر داده های وضعیت ، جلسات راهی برای به خاطر سپردن وضعیت احراز هویت کاربر است به گونه ای که بسته به اعتبار خاص ، مشتری نیازی به ارسال اطلاعات تأیید اعتبار برای هر درخواست ندارد.

رشته ذخیره سازی و رشته جستجوی URL در مقابل کوکی ها

قبل از معرفی HTML5 با AP Storage Web آن ، سه روش برای مدیریت حالت جلسه در یک وب سایت وجود داشت:

  • متغیرهای جاوا اسکریپت در حافظه سمت مشتری استفاده می شود ، اما هنگام بروزرسانی یا حرکت برای اولین بار ، گم می شوند. در سمت سرور ، یک شناسه جلسه در یک پارامتر رشته پرس و جو URL وارد می شود ، اما این برای حملات رفع جلسه مفید است - از طرف جلسه HTTP یا کوکی های مداوم.

جلسه و کوکی های دائمی

کوکی های HTTP متغیرهای داده ای هستند که در هدرهای HTTP منتقل می شوند. آنها لیستی از جفت های کلیدی / ارزش هستند.

آنها توسط این RFC رسمی تعریف شده اند: مکانیسم مدیریت وضعیت HTTP

فقط می توان چند داده فوق داده به این داده کلید یا مقدار اختصاص داد:

  • طول عمر توسط یک Max Age یا یک ویژگی منقضی شده تعریف شده است. اگر هیچ کدام مشخص نشده باشد ، این یک کوکی جلسه است که در دیسک ذخیره نمی شود و وقتی کاربر مرورگر را می بندد کوکی دائمی را بازیابی می کند - خنده دار است که آن را دائمی می نامد در حالی که ما طول عمر آن را مشخص می کنیم ... ؛--) - ویژگی های دامنه و مسیر امکان محدود کردن درخواست های HTTP را که از این داده های کوکی تعبیه شده اند ، محدود می سازند. درخواست HTTP فقط از آنهایی استفاده می کند که دامنه و مسیر آنها با سرصفحه میزبان و رشته URI درخواست مطابقت دارد. اگر ویژگی امن فقط باعث ایجاد کوکی ها از طریق اتصالات HTTPS شود ، آنها رمزگذاری می شوند. حملات دستی در وسط هنوز در HTTPS امکان پذیر است ، اما برای کاربر قابل تشخیص و قابل مشاهده است (مرورگر هشداری درباره گواهی های نامعتبر نشان می دهد). آنها برای جلوگیری از حملات اسکریپت های متقاطع (XSS) در پرونده ها در پرونده ها نمایش داده نمی شوند

مشکل کوکی ها این است که آنها با هر درخواست HTTP ارسال شده توسط مرورگر بطور خودکار توسط مرورگر ارسال می شوند. بنابراین ، توصیه می شود از آنها فقط برای ذخیره "شناسه جلسه" در حالت "httpOnly" استفاده کنید.

کوکی ها ، به ویژه کوکی های sessionId ، معمولاً در ابتدا توسط یک هکتار HTTP تنظیم شده توسط سرور با پاسخ HTTP ارسال می شوند.

HTTP / 1.0 200 OK نوع محتوا: متن / HTML مجموعه-کوکی: جلسه = 123e4567-e89b؛ پشتیبان گیری httpOnly؛ حداکثر سن = 1200

سپس مرورگر با هر درخواستی که همان مبدا را هدف قرار می دهد (مبدا = IP یا نام دامنه + شماره پورت) آن را دوباره ارسال می کند.

GET /sample_page.html میزبان HTTP / 1.1: www.example.org کوکی: جلسه = 123e4567-e89b؛ پشتیبان گیری httpOnly؛ حداکثر سن = 1200

می توانید با استفاده از JavaScript کوکی ها را بخوانید و ایجاد کنید ، اما در بیشتر موارد شکاف امنیتی وجود دارد. بنابراین سعی کنید از آنها استفاده نکنید.

توجه: برخی از پیش نویس مشخصات گاهی اوقات برخی از ویژگی های فرمت را پیشنهاد می کنند ، به عنوان مثال: پیش نویس کوکی های حزب اول غرب - کوکی ها برای همان سایت

LocalStorage & SessionStorage

API ذخیره سازی وب به عنوان روشی کارآمدتر جهت صرفه جویی در حالت های مشتری ، به HTML5 اضافه شده است.

توسط همه مرورگرهای مدرن پشتیبانی می شود (رجوع کنید به: آیا می توانم از حافظه وب استفاده کنم)

شما 2 فروشگاه وب استاندارد دریافت می کنید که با دسترسی به منبع کنترل می شوند:

  • SessionStorage و LocalStorage

هنگام بسته شدن مرورگر ، SessionStorage به عنوان کوکی های جلسه حذف می شود.

LocalStorage جفت های کلیدی / مقدار را بر روی هارد دیسک در یک فضای نام مبتنی بر منبع ذخیره می کند.

هر دو API ذخیره سازی وب را با استفاده از روش های زیر ارائه می دهند:

  • setItem (کلید ، مقدار) ، getItem (کلید ، مقدار) ، removeItem (کلید) و پاک کردن ()

نام شما برای خودش صحبت می کند

همچنین می توانید با استفاده از موارد زیر ، تمام مقادیر ذخیره شده را چرخه بزنید:

  • روش کلید (keyIndex) و خاصیت طول ، که تعداد کلیدهای ذخیره شده را مشخص می کند

راه دیگر استفاده از انبارها نوشتن است

  • localStorage.myKey = myValue و var myValue = localStorage.myKey؛

اما بعد از سالها تجربه ، استفاده از این نماد آخر را توصیه نمی کنم. مقادیر ذخیره شده باید به صورت رشته باشند به طوری که نماد انتساب به صورت خودکار و بصری مقداری را که ممکن است حاوی مقادیر "[[شیء] ذخیره شده غیرمنتظره" باشد ، مشخص کند.


پاسخ 2:

من فکر می کنم که الکساندر مورگوت جواب خارق العاده ای داد ، اما فکر کردم یک پاسخ کلی برای مردم مفید است.

LocalStorage و کوکی ها داده هایی هستند که یک وب سایت می تواند در رایانه کاربر ذخیره کند. هر دو آنها کاملاً کوچک هستند و حداکثر 4 مگابایت از LocalStorage می باشد.

شکل دیگر ذخیره سازی داده ها IndexedDB است ، یک بانک اطلاعاتی سمت مشتری با ظرفیت ذخیره سازی قابل توجهی بیشتر.

یک جلسه وضعیتی است که تمام چیزهایی را که مربوط به کاربر است در حالی که آن کاربر به یک سرویس وارد شده است ، نشان می دهد. این جلسه ممکن است حاوی کوکی باشد و حتی ممکن است کاملاً از کوکی ها تشکیل شود ، اما کوکی ها لزوماً جزئی از یک جلسه نیستند.

پست الکساندر را هم اکنون بخوانید.