PDA

View Full Version : logout شدن در codeigniter



beh3000
دوشنبه 15 اردیبهشت 1393, 15:03 عصر
سلام دوستان

من با فریم ورک codeigniter کار میکنم و برای سشن بانک اطلاعاتی رو فعال کردم و داخل جدول ci_session ذخیره میشه زمان session_expiration روی 3600 هست یعنی 1 ساعت و زمان sess_time_to_update روی 120 ( یعنی هر 120 ثانیه جدول رو آپدیت میکنه ) این از این .... ولی بعضی مواقع خود به خود کاربر logout میشه ( قبل از اینکه یک ساعت تموم بشه ) نمیدونم مشکل از کجاست لطفا راهنمائیم کنید

plague
دوشنبه 15 اردیبهشت 1393, 21:43 عصر
کلا کلاس سشن کد ایگنایتر باگ داره
ورژنی که استفاده میکنی چیه ؟

beh3000
دوشنبه 15 اردیبهشت 1393, 21:59 عصر
جدیدترین نسخشو دانلود کرده بودم دو ماه پیش ک هشروع کردم به کار کردن

beh3000
دوشنبه 15 اردیبهشت 1393, 22:01 عصر
ورژن 2.1.4 استفاده میکنم

plague
دوشنبه 15 اردیبهشت 1393, 23:02 عصر
اینجوری بزار


$config['sess_expiration'] = 86400;
$config['sess_time_to_update'] = 86500;

beh3000
سه شنبه 16 اردیبهشت 1393, 11:15 صبح
من از تاریخ last activity برای بدست آوردن کاربران آنلاین استفاده میکنم ( یک شبکه اجتماعی رو فرض کن ) پس باید زمان sess_time_to_update کمتر از زمان sess_expiration باشه , مثلا میگم کاربرانی که زمانهاشون حداکثر 10 دیقه گذشته است آنلاین هستند و اگه با روش شما برم زمان کاربر حتی وقتی داره کار میکنه آپدیت نمیشه و طرف رو آفلاین نشون میده

plague
سه شنبه 16 اردیبهشت 1393, 20:32 عصر
last activity رو اصولا باید رو تیبل یوزر هات پیاده کنی نه سشن ها
به این ترتیب میفهمی دقیقا کیا لاگین هستن که لازمه برای شبکه اجتماعی و وقتی کاربری لاگ اوت کنه متوجه میشی که آخرین فعالیتش کی بوده نه اینکه کلا بعد از لاگ اوت مشخصاتش از دیتابیس پاک بشه و معلوم نباشه کی این آقا فعال بوده آخرین بار (با توجه به اینکه اطلاعات کاربر کد شده قرار داده میشن در تیبل سشن من نمیدونم شما چجوری میفهمی کدوم کاربر کیه ! فقط به درد این میخوره که به شکل کلی بدونی چند نفر هستن )

خلاصه اینکه متاسفانه کد ایگنایتر مشکل رو داره و راهش هم اینه که زمان آپدیت رو یجورایی حذف کنی با بیشتر گزاشتن از زمان انقضا
اون قسمت last activity رو هم خودت پیاده کن تو یک تیبل جدا (در صورتی که میخای لاگین نشده ها رو هم بشماری )
یا در تیبل یوزر ها ( در صورتی که فقط آمار لاگین شده ها رو میخای داشته باشی )

beh3000
سه شنبه 16 اردیبهشت 1393, 21:46 عصر
من یک فیلد ( user_id ) داخل جدول ci_session اضافه کردم و کلاس سشن روهم تغییر دادم یعنی هنگامی که set_userdata انجام میشه علاوه بر فیلد user_data در فیلد user_id آیدی کاربر هم ذخیره میشه ( اینکارو کردم که اضافه کاری نشه ) سشن که داره آپدیت میشه آیدی کاربر رو هم ذخیره میکنه دیگه ( خود فریم ورک رو تغییر دادم :قهقهه: ) ... الان هم فهمیدم که وقتی سورس کد رو تغییر میدم ( چون در حال برنامه نویسی سایت هستم ) و سپس توی مرورگر دکمه f5 رو میزنم logout رخ میده در بیشتر موارد .

ولی حالا که مشکل داره شاید خودم توی جدول یوزر last activity گذاشتم : در مورد اینکه فریم ورک رو تغییر دادم نظرتون رو بگین خیلی ناشیانه بود ؟

beh3000
سه شنبه 16 اردیبهشت 1393, 22:08 عصر
بعد از پاسخ دادن به پست بالا یک سوال دیگه هم ازتون داشتم : الان توی سایت من وقتی یک کاربر لاگین میکنه فک کنم 11تا سشن ساخته میشه یوزر مثل یوزرآیدی یوزرنیم نام و نام خانوادگی نام و مسیر تصویر پروفایل و ... بهتر نیست اونهایی که مشکل امنیتی ایجاد نمیکنند مثل نام و نام خانوادگی و نام و مسیر تصویر پروفایل رو داخل کوکی ذخیره کنم ؟ نظرتون رو بگین لطفا .. این رو هم بگین که توی کد ایگنایتر چرا این امکان ذخیره سشن داخل دیتا بیس وجود داره فقط بخاطر اینه که امنیتش بیشتره یا اینکه بار تحمیل شده به سرور در تعداد یوزر بالا در این حالت کمتره ؟؟؟ و اینکه آیا تو این حالت روی سرور سشن وجود نداره و فقط دیتا بیس ملاکه که اگه اینجوری باشه تعداد سشن ها ( 11 ) تاثیر زیادی نداره چون بصورت آرایه در دیتابیس ذخیره میشه و روی رم سرور تاثیر زیادی نداره ... خیلی ممنونم ازتون

plague
چهارشنبه 17 اردیبهشت 1393, 16:53 عصر
ولی حالا که مشکل داره شاید خودم توی جدول یوزر last activity گذاشتم : در مورد اینکه فریم ورک رو تغییر دادم نظرتون رو بگین خیلی ناشیانه بود ؟


نه تغییر دادن فریم ورک به شرط اینکه کد رو درست نوشته باشید و به اکو سیستمش آسیبی نزنه کار بدی نیست



بعد از پاسخ دادن به پست بالا یک سوال دیگه هم ازتون داشتم : الان توی سایت من وقتی یک کاربر لاگین میکنه فک کنم 11تا سشن ساخته میشه یوزر مثل یوزرآیدی یوزرنیم نام و نام خانوادگی نام و مسیر تصویر پروفایل و ... بهتر نیست اونهایی که مشکل امنیتی ایجاد نمیکنند مثل نام و نام خانوادگی و نام و مسیر تصویر پروفایل رو داخل کوکی ذخیره کنم ؟ نظرتون رو بگین لطفا .. این رو هم بگین که توی کد ایگنایتر چرا این امکان ذخیره سشن داخل دیتا بیس وجود داره فقط بخاطر اینه که امنیتش بیشتره یا اینکه بار تحمیل شده به سرور در تعداد یوزر بالا در این حالت کمتره ؟؟؟ و اینکه آیا تو این حالت روی سرور سشن وجود نداره و فقط دیتا بیس ملاکه که اگه اینجوری باشه تعداد سشن ها ( 11 ) تاثیر زیادی نداره چون بصورت آرایه در دیتابیس ذخیره میشه و روی رم سرور تاثیر زیادی نداره ... خیلی ممنونم ازتون





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

شما فقط یه سشن نیاز داری اون هم شناسه کاربر در دیتابیس هست
شما باید تو تک تک صفحهات قبل از اینکه با ویو بری چک کنی کاربر لاگین هست یا نه و در صورت لاگین بودن (آیدیش رو از سشن میخونی ) از دیتایس دریافتش کنی و بفرستی به ویو
من میدونم که شما به فکر صرفه جویی در مصرف منابع هستی ولی این راهش نیست و خوندن اطلاعات غیر از شناسه از سشن درست نیست , خوندن یک یوزر از تیبل زور ها با آیدی ایندکس شده 2-3 صدم ثانیه هم طول نمیکشه .... که خیلی سریعتر از خوندن سشن 11 تایی هست (با توجه با اینکه 11 سشن در یک فیلد دیتابس درهم هستن و کد ایگنایتر فکر میکنم از like یا مکانیسم مشابهی استفاده میکنه در کوئری برای خوندنشون که کوئری رو کند میکنن )

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

راه درستش اینه که شما از ارث بری استفاده کنی و یه کنترلر بیس بسازی که همه کنترلر های دیگه از اون ارث ببرن اونوقت میتونی توی کنترلر بیست موارد تکراری مثل خوندن یوزر ز دیتبایس و چک کردن آنلاین بودنش رو و ثبت last activity رو قرار بدی و در همه کنترلر ها ازش استفاده کنی


ا

beh3000
چهارشنبه 17 اردیبهشت 1393, 17:34 عصر
الان تغییرش دادم و توی جدول یوزر lastactivity گذاشتم کلاس session و جدول ci_session رو هم به حالت قبل برگشت و الان سوالم اینه که اگه من از سرور اختصاصی استفاده کنم یعنی پوشه سشن ها با سایتهای دیگه مشترک نباشه لازمه از دیتابیس برای سشن استفاده کنم ؟ یا خود سشن بهتره ؟

هیچ استفاده ای از جدول سشنها نمیکنم

plague
چهارشنبه 17 اردیبهشت 1393, 19:39 عصر
نه اجباری نیست به استفاده از دیتابیس