کنترل بازدیدکنندگان در لاراول

کنترل بازدیدکنندگان در لاراول
آکادمی آی تی
آکادمی آی تی
dots

کنترل بازدیدکنندگان در لاراول

زمان مورد نیاز برای مطالعه 5 دقیقه

کنترل بازدیدکنندگان در لاراول، از اولویت های هر وبسایتی هست که باعث درک نیاز کاربر توسط ما می شود. در این بخش به روش کنترل بازدیدکنندگان در لاراول می پردازیم.

دپارتمان ‌ها: آموزش برنامه نویسی
1398/08/02
5,356 بازدید

برای انجام این کار در لاراول چندین روش وجود داره.یکی از این روش ها استفاده از پکیج هاست. پکیج های مختلف با کارایی متفاوت برای این کار وجود دارند مثلاً پکیج laravel-analytics که اطلاعات رو از Google Analytics می گیره و برای شما نمایش میده. پکیج محبوب tracker هم امکانات مناسبی برای کنترل بازدیدکنندگان در لاراول و اطلاعات اون ها در اختیار شما می گذاره.

اما برای آموزش لاراول روشی که ما می خوایم  در این مقاله در موردش صحبت کنیم استفاده از کنترل کاربر با مدل Session در لاراول هست که در خود مستندات لاراول هم وجود داره و میشه گفت یک روش داخلی لاراول برای رصد بازدیدکنندگان هست. قابلیت خوبی که این روش داره آینه که توسط کلاس‌های خود لاراول مثل کلاس Auth و جدول Sessions می تونیم بازدیدکنندگان مهمان و ثبت نام کرده رو هم تشخیص بدیم.

 

روش کنترل بازدیدکنندگان در لاراول

قدم اول)

فایل config/session.php رو باز کنید و بصورت زیر مقدار driver رو database وارد کنید (توجه کنید که در فایل env.هم باید SESSION_DRIVER رو database کنید )

'driver' => env('SESSION_DRIVER', 'database'),

 

قدم دوم)

ما نیاز داریم که جدول sessions رو هم بسازیم.برای این کار باید توسط دستور زیر migration مورد نظرمون رو در مسیر database/migrations ایجاد کنیم:

php artisan session:table

 

قدم سوم)

فایل جدید ایجاد شده در migrations باید شبیه زیر باشه:

string('id')->unique();

$table->integer('user_id')->nullable();

$table->string('ip_address', 45)->nullable();

$table->text('user_agent')->nullable();

$table->text('payload');

$table->integer('last_activity');

});

}



/**

* Reverse the migrations.

*

* @return void

*/

public function down()

{

Schema::dropIfExists('sessions');

}

}

همینطور که ملاحظه می‌کنید جدول sessions بصورتی ساخته میشه که یک کلید خارجی به اسم user_id باید به کلید اصلی جدول user متصل بشه که در ادامه این کار رو انجام میدیم.

فیلد های بعدی شامل اطلاعاتی از کاربران میشه مثل آدرس IP, زمان آخرین فعالیت و اطلاعات مرورگر و دستگاه مورد استفاده کاربران.

 

قدم چهارم)

با اجرای دستور composer dump-autoload و دستورphp artisan migrate جدول طراحی شده رو به دیتابیس اضافه کنید.

نکته:اگر شما composer رو بصورت global نصب نکردید کافیه از دستور زیر استفاده کنید:

php composer.phar dump-autoload

 

دوره آموزش لاراول 8

 

قدم پنجم)

حالا نوبت ایجاد مدل برای جدول sessions هست.یک مدل در مسیرApp بسازید و کدهای زیر رو وارد کنید:

belongsTo('App\User');

}



/**

* Returns all the users within the given activity.

*

* @param \Illuminate\Database\Eloquent\Builder $query

* @param int $limit

* @return \Illuminate\Database\Eloquent\Builder

*/

public function scopeActivity($query, $limit = 10)

{

$lastActivity = strtotime(Carbon::now()->subMinutes($limit));



return $query->where('last_activity', '>=', $lastActivity);

}



/**

* Returns all the guest users.

*

* @param \Illuminate\Database\Eloquent\Builder $query

* @return \Illuminate\Database\Eloquent\Builder

*/

public function scopeGuests(Builder $query)

{

return $query->whereNull('user_id');

}



/**

* Returns all the registered users.

*

* @param \Illuminate\Database\Eloquent\Builder $query

* @return \Illuminate\Database\Eloquent\Builder

*/

public function scopeRegistered(Builder $query)

{

return $query->whereNotNull('user_id')->with('user');

}



/**

* Updates the session of the current user.

*

* @param \Illuminate\Database\Eloquent\Builder $query

* @return \Illuminate\Database\Eloquent\Builder

*/

public function scopeUpdateCurrent(Builder $query)

{

$user = Auth::check();

if($user)

$userid = Auth::user()->id;



return $query->where('id', Session::getId())->update([

'user_id' => $user ? $userid : null

]);

}

}

در کد بالا برای تابع ()user مطمئن بشید آدرس مدل user سایتتون رو بدرستی وارد می کنید.همینطور که مشاهده می‌کنید توابع مختلفی برای استفاده وجود دارند و مهم ترینش UpdateCurrentهست که اول چک می کنه که کاربر بصورت مهمان هست یا ثبت نام شده و در نهایت جدولمون رو آپدیت می کنه.

 

قدم ششم)

حالا نوبت استفاده از این قابلیت هست.اول باید تابع ;()Session::updateCurrent رو جاهایی قرار بدید که مطمئن بشید اطلاعات آمار بازدیدکنندگان سایت به روز میشه.مثلاً میتونید داخل فایل routes/web.php قرار بدید یا اینکه در کنترلرها.

نکته:برای استفاده از این مدل وارد کردن مدل بصورت use App\Sessions رو فراموش نکنید.

 

گرفتن تمام کاربران اعم از ثبت نام شده و مهمان

$all = Session::all();

 

گرفتن تمام کاربرانی که تا10دقیقه پیش آنلاین بوده‌اند

$all = Session::activity(10)->get();

 

گرفتن کاربران مهمان و تعدادشان

$guests = Session::guests()->get();

//Get the # of Guest users



$total = Session::guests()->count();

 

گرفتن تمام کاربران ثبت نام شده

$registered = Session::registered()->get();



foreach ($registered as $online) {

// You can retrieve the user information using something like:

var_dump($online->user->email);

}

 

تعداد کاربران ثبت نام شده

$total = Session::registered()->count();