ورود به سایت

لوگو آکادمی آی تی
info[at]academyit.net 026-34252294 09126492189

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

رصد و کنترل آمار مطمئن از بازدیدکنندگان وبسایت یکی از اولویت های هر وبسایتی هست و هر مدیر سایتی میخواد که این آمار رو بصورت به روز داشته باشه و کنترل کنه.


برای انجام این کار در لاراول چندین روش وجود داره. یکی از این روش ها استفاده از پکیج هاست. پکیج های مختلف با کارایی متفاوت برای این کار وجود دارند مثلاً پکیج 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

قدم پنجم)

حالا نوبت ایجاد مدل برای جدول 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();