انتخاب یک مدیر جلسه (Choosing a Session Manager)
در این بخش، نحوه انتخاب یک مدیر جلسه (Session Manager) مناسب را بررسی میکنیم. یک مدیر جلسه خوب باید قابلیتهای ذخیرهسازی (Storage)، امنیت (Security) و مقیاسپذیری (Scalability) مناسبی داشته باشد.
برای پروژه ما، از پکیج alexedwards/scs (SCS Package) استفاده خواهیم کرد که یک مدیر جلسه (Session Manager) سبک و امن است. این پکیج از کوکیهای امن (Secure Cookies) برای ذخیرهسازی جلسه (Session Storage) استفاده میکند.
هنگام کار با جلسات، ملاحظات امنیتی زیادی وجود دارد و پیادهسازی صحیح آنها کار سادهای نیست. مگر اینکه واقعاً نیاز به پیادهسازی خودتان داشته باشید، بهتر است از یک بسته شخص ثالث موجود و تست شده استفاده کنید.
پیشنهاد میکنم بسته gorilla/sessions یا alexedwards/scs را بسته به نیاز پروژهتان استفاده کنید.
gorilla/sessionsشناختهشدهترین و معتبرترین بسته مدیریت جلسه برای Go است. این بسته دارای یک API ساده و آسان برای استفاده است و به شما اجازه میدهد دادههای جلسه را در سمت کلاینت (در کوکیهای امضا شده و رمزگذاری شده) یا سمت سرور (در یک پایگاه داده مانند MySQL، PostgreSQL یا Redis) ذخیره کنید.با این حال، مهم است که بدانید این بسته مکانیزمی برای تجدید شناسههای جلسه ارائه نمیدهد (که برای کاهش خطرات مرتبط با حملات تثبیت جلسه ضروری است اگر از یکی از ذخیرهسازهای جلسه سمت سرور استفاده میکنید).
alexedwards/scsبه شما اجازه میدهد دادههای جلسه را فقط در سمت سرور ذخیره کنید. این بسته از بارگذاری و ذخیره خودکار دادههای جلسه از طریق میانافزار پشتیبانی میکند، دارای یک رابط کاربری زیبا برای دستکاری نوع-ایمن دادهها است و اجازه تجدید شناسههای جلسه را میدهد. مانندgorilla/sessions، این بسته نیز از انواع پایگاه دادهها (از جمله MySQL، PostgreSQL و Redis) پشتیبانی میکند.
به طور خلاصه، اگر میخواهید دادههای جلسه را در سمت کلاینت در یک کوکی ذخیره کنید، gorilla/sessions انتخاب خوبی است، اما در غیر این صورت alexedwards/scs به دلیل قابلیت تجدید شناسههای جلسه به طور کلی گزینه بهتری است.
برای این پروژه، ما قبلاً یک پایگاه داده MySQL راهاندازی کردهایم، بنابراین تصمیم گرفتیم از alexedwards/scs استفاده کنیم و دادههای جلسه را در سمت سرور در MySQL ذخیره کنیم.
اگر شما هم در حال دنبال کردن هستید، مطمئن شوید که در دایرکتوری پروژهتان هستید و بستههای لازم را به این صورت نصب کنید:
$ go get github.com/alexedwards/scs/v2@v2 go: downloading github.com/alexedwards/scs/v2 v2.8.0 go get: added github.com/alexedwards/scs/v2 v2.8.0 $ go get github.com/alexedwards/scs/mysqlstore@latest go: downloading github.com/alexedwards/scs/mysqlstore v0.0.0-20240316133359-d7ab9d9831ec go get: added github.com/alexedwards/scs/mysqlstore v0.0.0-20240316133359-d7ab9d9831ec
واژهنامه اصطلاحات فنی
| اصطلاح فارسی | معادل انگلیسی | توضیح |
|---|---|---|
| مدیر جلسه | Session Manager | نرمافزار مدیریت جلسات کاربران |
| ذخیرهسازی | Storage | محل نگهداری دادههای جلسه |
| امنیت | Security | حفاظت از دادهها و جلسات |
| مقیاسپذیری | Scalability | قابلیت رشد و گسترش سیستم |
| پکیج alexedwards/scs | SCS Package | کتابخانه مدیریت جلسه در Go |
| کوکیهای امن | Secure Cookies | کوکیهای رمزنگاری شده |
| ذخیرهسازی جلسه | Session Storage | محل نگهداری دادههای جلسه |
| رمزنگاری | Encryption | محافظت از دادهها با کدگذاری |
| احراز هویت | Authentication | تأیید هویت کاربران |
| مدیریت خطا | Error Handling | مدیریت خطاهای جلسه |