انتخاب یک مدیر نشست
هنگام کار با نشستها، ملاحظات امنیتی زیادی وجود دارد و پیادهسازی مناسب پیشپاافتاده نیست. مگر اینکه واقعاً نیاز به پیادهسازی خودتان داشته باشید، استفاده از یک بسته شخص ثالث موجود و به خوبی تست شده در اینجا ایده خوبی است.
بسته به نیازهای پروژه شما، استفاده از gorilla/sessions یا alexedwards/scs را توصیه میکنم.
gorilla/sessionsبسته مدیریت نشست تثبیتشدهترین و شناختهشدهترین برای Go است. یک API ساده و آسان برای استفاده دارد و به شما اجازه میدهد دادههای نشست را سمت کلاینت (در کوکیهای امضا شده و رمزگذاری شده) یا سمت سرور (در یک پایگاه داده مانند MySQL، PostgreSQL یا Redis) ذخیره کنید.با این حال — مهم است — مکانیزمی برای تمدید شناسههای نشست ارائه نمیدهد (که برای کاهش خطرات مرتبط با حملات session fixation لازم است اگر از یکی از ذخیرهکنندههای نشست سمت سرور استفاده میکنید).
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