علیرضا
4 سال پیش توسط علیرضا مطرح شد
7 پاسخ

نحوه ی مدیریت نشست ها در لاراول

سلام و درود ،
امیدوارم حالتون خوب و تنتون سالم باشه
من میخواستم قسمتی رو پیاده کنم که کاربر بتونه قسمت نشست های فعالش رو مشاهده کنه و اونارو مدیریت کنه!
مثل این تصویر
نشست های فعال در لاراول

من سه تا سوال هنگام پیاده سازیش برام پیش اومده که اگه جواباشونو بصورت کامل بگیرم خیلی عالی میشه !

1-بطور کلی باید چطوری پیاده کنم؟
2-خودم میخام از جدول سشن ها استفاده کنم چون اطلاعات کاملی میده ولی یه عیبی داره اینه که من فقط میتونم نشست های فعال رو مشاهده کنم چون اگر غیر فعال باشه userid رو null قرار میده و من دیگه نمیتونم یوزرو پیداکنم . و در ادامه چجوری میتونم این عیب رو برطرف کنم؟
3-سشن هایی که تو جدول ذخیره میشن فقط مربوط به لاگین هستند؟ یا هر سشنی که تعریف بشه در اون جدول ذخیره میشه؟ و اینکه بعد چه مدتی سشن ها حذف میشند؟


ثبت پرسش جدید
علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

۳ راه کلی به نظر من میرسه:

  • استفاده از جدول و مدل جدا، که بالا توضیح دادم (۱ کوئری در زمان لاگین و یکی هم در زمان لاگ‌اوت .. اون قدر ها هم اذیت کننده نیست..)
  • تغییر ساختار ذخیره سازی سشن در لاراول که بهتره با احتیاط انجام بشه: illuminates/session
  • اضافه کردن یه فیلد به جدول sessions که user_id رو ذخیره کنه و مقدار Nullهم نپذیره

از سایر دوستان هم میتونی کمک بگیری


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

شما ابتدا باید از درایور database برای سیستم سشن ها استفاده کنی
سپس وقتی سشن های کاربرا تو دیتابیس ذخیره میشند..
شما اون رکورد ها رو برای هر کاربر در پنل کاربریش نمایش میدی


برای نشست های غیرفعال منطقیه که مقدار user_id برابر null باشه..
فیلد ip_address هم در جدول sessions هست
میتونی از طریق اون فیلد، تمام نشست های یک IP رو بدست بیاری


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

مدت زمان هم قابل تنظیمه
config\session.php

    /*
    |--------------------------------------------------------------------------
    | Session Lifetime
    |--------------------------------------------------------------------------
    |
    | Here you may specify the number of minutes that you wish the session
    | to be allowed to remain idle before it expires. If you want them
    | to immediately expire on the browser closing, set that option.
    |
    */

    'lifetime' => env('SESSION_LIFETIME', 120),

علیرضا
تخصص : فرانت اند وب
@sep28 4 سال پیش مطرح شد
0

@ali.bayat
سلام و عرض ادب
ممنونم از پاسخگویی شما آقای بیات
خب در این میان دوتا مشکل و یه سوال برای من به وجود میاد.برای مثال من با دوستگاه مختلف لاگین میکنم ولی اگر نشست در دستگاه دوم غیر فعال بشه. من نمیتونم مشخص کنم که در دستگاه دوم آیا نشتسی وجود داشته یانه چون user_id برابر null هست. و من نمیتونم تو جدول پیداش کنم

دوم اینکه من فقط به سشن های لاگین نیاز دارم و از طرفی سشن های معمولی که بصورت دستی تعریف کنم تو اون جدول ذخیره میشه ؟! برای این مشکل چیکارکنم چجوری تفکیک کنم؟
و سوالم اینه که تیکه کدی شما نوشتید مدت زمان ذخیره سشن ها رو تو دیتابیس مشخص میکنه یا مدت زمانی که فعال هستند؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

نشست زمانی غیر فعال میشه که کاربر از سیستم شما خارج میشه
و زمانی که کاربر در سیستم نیست .. خوب نباید هم نشست فعال باشه دیگه

شما نشست فعال رو با user_id میگیرید
سپس از فیلد ip_address استفاده میکنی و نشست های غیر فعال رو هم میگیری.

بعد این فیلدها، فیلدهای پیشفرض لاراول هست شما میتونی سورس کد رو ویرایش کنی و فیلد های خودت رو هم اضافه کنی..

SESSION_LIFETIME عمر سشن هست.. بعد از این مقدار دقیقه سشن اکسپایر میشه


علیرضا
تخصص : فرانت اند وب
@sep28 4 سال پیش مطرح شد
0

@ali.bayat
درود فراوان بر شما
ببخشید که بهتون زحمت میدم.
خب نشست های غیر فعال رو میخواستم در کنار این نشست های فعال نشون بدم . خب هر آیپی بنظرم فقط یه نشست میتونه داشته و اگر کاربر با دستگاه دیگه و ایپی دیگه با یوزر من لاگین کنه و نشتسش غیر فعال باشه من اصلا متوجه حضورش نمیشم. بنظر من بای یه فیلد اضافه کنم مشابه user_id که با این تفاوت مقدار null نگیره درسته؟؟؟؟
دوم اینکه من فقط به سشن های لاگین نیاز دارم و از طرفی سشن های معمولی که بصورت دستی تعریف کنم تو اون جدول ذخیره میشه ؟! برای این مشکل چیکارکنم چجوری تفکیک کنم؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

میتونی خودت یه جدول جدا بسازی
و موقع login & logout مقادیر رو درش آپدیت کنی.. اینجوری میتونی هر فیلدی هم دوست داشتی اضافه کنی


علیرضا
تخصص : فرانت اند وب
@sep28 4 سال پیش مطرح شد
0

@ali.bayat
بنظرم از جدول سشن ها استفاده کنم بهینه تر میتونه باشه چون از اونجا میتونم سشن ها رو پاک کنم خیلی جالبتره و دیگه کوئری اضافه نزنم
همینطور گفتم دوتا مشکل دارم که تو بالاذکر کردم اگر وقت دارید و زحمتی نیست لطفا پیشنهادی برای حلشون بهم بدید🌹🌷


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

۳ راه کلی به نظر من میرسه:

  • استفاده از جدول و مدل جدا، که بالا توضیح دادم (۱ کوئری در زمان لاگین و یکی هم در زمان لاگ‌اوت .. اون قدر ها هم اذیت کننده نیست..)
  • تغییر ساختار ذخیره سازی سشن در لاراول که بهتره با احتیاط انجام بشه: illuminates/session
  • اضافه کردن یه فیلد به جدول sessions که user_id رو ذخیره کنه و مقدار Nullهم نپذیره

از سایر دوستان هم میتونی کمک بگیری


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام