2014-11-24 94 views
0

我的目標是檢查我的用戶表中的所有用戶,以查看他們是否在線使用Laravel 4。 我也對誰也沒有登錄感興趣。 稍後,我想打印出2個單獨列出的誰在線,誰不是?如何檢查所有用戶是否在Laravel 4上線?

  • 是否有快速出路?
  • 我使用Laravel附帶的Auth::check()嗎?
  • 我需要更新我的database上的任何內容嗎?

樣品

Sample Image

回答

1

我想一些邏輯建議給你。

  • 是的,你需要更新你的數據庫。您的用戶表。 我建議在一個叫列:is_online,TINYINT,0或1。

之後你有,

  • 在你登錄在功能,在某處你到底重定向前。

    set is_online = '1'; //這應該保存到您的數據庫了。

  • 在您的註銷函數中應用相同的邏輯,在重定向之前的某個地方結束。

    set is_online = '0'; 
    

不要忘記保存!通過在您更新數據庫中的任何信息時執行$user->save();

打印列表 你可以做

For all the user()->is_online = '1' OR user()->is_online = '0' 
// Do any programming logic with it, print it or whatever ... 

試試看吧!如果你堅持,發佈一些代碼,我會幫你通過它。

+3

怎麼樣,如果用戶不退出?他/她將永遠在線。 – Jerodev 2014-11-24 15:54:54

+0

呼叫良好。 @Iggy:你有沒有這樣的事情? – iori 2014-11-24 16:02:08

+0

您可以執行會話超時並相應地設置變量。 :D – 2014-11-24 16:02:51

4

無法知道用戶是否仍在您的網站上。你只能用一些方法來猜測它們是否是。

最常用的方法是保存用戶上次訪問頁面的時間戳。如果您說用戶在一頁上停留一分鐘,如果上次時間戳和當前時間戳之間的時間少於一分鐘,則可以說用戶處於聯機狀態。

Facebook使用一種ping功能來檢查這一點。他們每x秒發送一次ajax請求到服務器。這樣他們知道用戶仍然在網站上。

+0

我更喜歡你的答案。你能幫我多一點嗎?如果可能的話,你能否在Laravel中提供一個快速入門代碼?我完全同意你的想法。 – iori 2014-11-24 16:07:09

0

最近我有同樣的問題,解決它通過以下方式(Laravel 5):

  1. 創建遷移,增加了現場 'last_online' 給你的用戶表
class AddLastOnlineToUsersTable extends Migration 
{ 
    public function up() 
    { 
     Schema::table('users', function (Blueprint $table) 
     { 
      $table->dateTime('last_online'); 
     }); 
    } 


    public function down() 
    { 
     Schema::table('users', function (Blueprint $table) { 
     $table->dropColumn('last_online'); 
    }); 
} 

不要忘記將新字段添加到$可填寫和$在用戶模式日期排列。

  • 如果您使用的抽象控制器類爲基礎,所有的控制器(如果沒有,你應該考慮它),你可以添加以下這一控制器:
  • abstract class Controller extends BaseController 
    { 
        public function __construct() 
        { 
         $this->user = Auth::user(); 
         if($this->user) 
         { 
          $this->user->last_online = Carbon::now(); 
          $this->user->save(); 
         } 
        } 
    } 
    
  • 創建GetUsersOnlineRepository(或者服務)用下面的函數(不要忘記包括碳\碳和用戶模型):
  • public function getAllUsersOnline($seconds_since_last_activity = 300) 
    { 
        $last_activity = Carbon::now()->subSeconds($seconds_since_last_activity); 
        $online_users = User::where('last_online', '>=', $last_activity)->get(['id', 'user_name']); 
        return $online_users; 
    } 
    
  • 在你的控制器,調用函數getAllUsersOnline()在該新的存儲庫/服務。