سلام دوستان
خسته نباشید
توی لاگ اوت سایت برای کاربر جاری این کد رو نوشتم:
public function actionLogout()
{
$user = User::find()->where('id = :id', [':id' => Yii::$app->user->identity->id])->one();
$user->touch('last_login');
Yii::$app->user->logout();
return $this->goHome();
}
و وقتی کاربر لاگین می کنه همه اون موارد جدید رو که لازمه رو می بینه
مشکل اینجاست که کاربر حتما باید گزینه خروخ رو بزنه
می شه کاری کرد که کاربر auto login باشه و اگه بعد از یه مدت اومد بازم بتونه موارد جدید رو ببینه؟
ممنون
میتونید توی رکورد کاربر یه فیلد برای زمان آخرین فعالیت بگذارین و هروقت کاری انجام میده، اون رو تغییر بدین. اینطوری زمان آخرین فعالیت کاربر رو دارین حتی اگه مرورگر رو ببنده. میتونید یه کار دیگه هم انجام بدین. یه فیلد لاگ اوت بگذارین و وقتی کاربر لاگ اوت میکنه اون رو 1 کنید. حالا وقتی کاربر لاگین میکنه، اگه فیلد لاگ اوتش 0 بود یعنی دفعه قبل لاگ اوت نکرده و در این صورت از فیلد آخرین زمان فعالیت استفاده کنید.
(19-04-1394، 04:53 ب.ظ)ADMIN نوشته: [ -> ]میتونید توی رکورد کاربر یه فیلد برای زمان آخرین فعالیت بگذارین و هروقت کاری انجام میده، اون رو تغییر بدین. اینطوری زمان آخرین فعالیت کاربر رو دارین حتی اگه مرورگر رو ببنده.
این به ذهنم رسید ولی به نظرم یه کم غیر منطقیه، تا کاربر تکون خورد من برم دیتابیس آپدیت کنم.
(19-04-1394، 04:53 ب.ظ)ADMIN نوشته: [ -> ]یه فیلد لاگ اوت بگذارین و وقتی کاربر لاگ اوت میکنه اون رو 1 کنید. حالا وقتی کاربر لاگین میکنه، اگه فیلد لاگ اوتش 0 بود یعنی دفعه قبل لاگ اوت نکرده و در این صورت از فیلد آخرین زمان فعالیت استفاده کنید.
اینم که فک کنم یه چیزیه مثل همون اولی که خودتون گفتید.
در ضمن وقتی لاگ اوت نکرده (و فیلدش صفره) من چطوری لاگ این رو تشخصی بدم؟ لاگین انجام نمی شه دیگه
وقتی لاگین میکنه، فیلد لاگ اوت رو صفر کنید. وقتی لاگ اوت کرد اون فیلد رو 1 کنید. حالا وقتی وارد سایت شما میشه، اگه فیلد لاگ اوت 1 بود، میفهمین آخرین بار لاگ اوت کرده و مطالب جدید رو براساس تاریخ آخرین لاگینش نشون میدین و اگه 0 بود یعنی لاگ اوت نکرده بوده و مطالب جدید رو برحسب زمان آخرین فعالیتش نشون بدین. میتونید از سیستم vBulletin و MyBB هم استفاده کنید:
- یه جدول برای آخرین زمان دیده شدن مطالب توسط کاربران ایجاد کنید (article_id و user_id و ts)
- اگه برای یه مطلب و کاربر خاص، رکوردی توی این جدول نبود یعنی کاربر تا حالا ندیده و جزو مطالب جدید نشون بدین (مثلاً Bold بشه یا یه آیکن کنارش بیاد که نشون میده تا حالا ندیده)
- اگه رکوردی وجود داشت، ts رو با زمان جاری چک کنید و اگه قدیمیتر بود یا بعد از اون تاریخ، تغییری انجام شده بود بعنوان جدید نشونش بدین (به شرطی که id مطلب توی سشن نباشه - توی مورد بعدی کاربرد سشن رو توضیح میدم)
- وقتی کاربر مطلبی رو باز کرد، توی جدولی که گفتم براش رکورد بگذارین بگین آخرین بار تو این زمان دیده شده و id مطلب رو توی سشن بگذارین تا دفعات بعد دوباره مطلب بعنوان جدید نشون داده نشه. اینطوری وقتی مرورگر رو ببنده مطالبی که قبلاً دیده حذف میشن و دوباره جدید نشون میده.
البته سیستم پروژه خودتون رو نگفتین چیه ولی فرضاً برای انجمن، vBulletin و MyBB میان id آخرین پست یه تاپیک و زمانش رو هم بجای ts توی جدول ثبت میکنن و وقتی کاربر میاد توی سایت، نگاه میکنن id آخرین پست تاپیک اگه بیشتر از id توی جدول بود یا ts اون بزرگتر از ts توی جدول بود، تاپیک رو بعنوان جدید (دارای تغییرات) نشون میدن.