From 5794b7582da9d7dddde96fdd4f627bc429ea6964 Mon Sep 17 00:00:00 2001 From: ilutkin Date: Fri, 17 Sep 2021 13:53:22 +0300 Subject: [PATCH 1/8] Lifetime cookie --- src/Data/Repositories/Cookie.php | 2 +- src/config/config.php | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Data/Repositories/Cookie.php b/src/Data/Repositories/Cookie.php index f7227062..4e7be1fb 100644 --- a/src/Data/Repositories/Cookie.php +++ b/src/Data/Repositories/Cookie.php @@ -35,7 +35,7 @@ public function getId() if (!$cookie = $this->request->cookie($this->config->get('tracker_cookie_name'))) { $cookie = UUID::uuid4()->toString(); - $this->cookieJar->queue($this->config->get('tracker_cookie_name'), $cookie, 0); + $this->cookieJar->queue($this->config->get('tracker_cookie_name'), $cookie, $this->config->get('tracker_cookie_lifetime')); } return $this->findOrCreate(['uuid' => $cookie]); diff --git a/src/config/config.php b/src/config/config.php index 38ca17fc..8bfabca4 100644 --- a/src/config/config.php +++ b/src/config/config.php @@ -239,6 +239,11 @@ */ 'tracker_cookie_name' => 'please_change_this_cookie_name', + /* + * If you are storing cookies, set the lifetime. + */ + 'tracker_cookie_lifetime' => 0, + /* * Internal tracker session name. */ From 9e35f06d3d062b88a9cb7eaccfc9d5e4daa58a1a Mon Sep 17 00:00:00 2001 From: ilutkin Date: Mon, 20 Sep 2021 16:32:41 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=9D=D0=BE=D0=B2=D0=B0=D1=8F=20=D1=81?= =?UTF-8?q?=D0=B5=D1=81=D1=81=D0=B8=D1=8F=20=D0=BF=D1=80=D0=B8=20=D0=B2?= =?UTF-8?q?=D1=8B=D1=85=D0=BE=D0=B4=D0=B5=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Data/Repositories/Session.php | 15 +++++++++++++++ src/Tracker.php | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/src/Data/Repositories/Session.php b/src/Data/Repositories/Session.php index 34c4ed4c..779c4919 100644 --- a/src/Data/Repositories/Session.php +++ b/src/Data/Repositories/Session.php @@ -282,6 +282,21 @@ public function getCurrent() return $this->getModel(); } + public function resetSession() + { + $this->sessionInfo['uuid'] = null; + + $data = $this->sessionInfo; + + unset($data['uuid']); + + $this->putSessionData($data); + + $this->checkSessionUuid(); + + return $data; + } + public function updateSessionData($data) { $session = $this->checkIfUserChanged($data, $this->find($this->getSessionData('id'))); diff --git a/src/Tracker.php b/src/Tracker.php index 7fde4dd0..fab00676 100644 --- a/src/Tracker.php +++ b/src/Tracker.php @@ -100,6 +100,11 @@ public function currentSession() return $this->dataRepositoryManager->sessionRepository->getCurrent(); } + public function resetSession() + { + return $this->dataRepositoryManager->sessionRepository->resetSession(); + } + protected function deleteCurrentLog() { $this->dataRepositoryManager->logRepository->delete(); From 602661775b085885970935193216b5d8e5f6cc4d Mon Sep 17 00:00:00 2001 From: ilutkin Date: Mon, 20 Sep 2021 16:33:16 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=97=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E=20handleError?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Support/Exceptions/Handler.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Support/Exceptions/Handler.php b/src/Support/Exceptions/Handler.php index f95cf6b8..b3ae8cf6 100644 --- a/src/Support/Exceptions/Handler.php +++ b/src/Support/Exceptions/Handler.php @@ -44,7 +44,7 @@ public function handleThrowable(Throwable $throwable) return call_user_func($this->originalExceptionHandler, $throwable); } - public function handleError($err_severity, $err_msg, $err_file, $err_line, array $err_context) + public function handleError($err_severity, $err_msg, $err_file, $err_line, array $err_context = []) { try { $error = ExceptionFactory::make($err_severity, $err_msg); From 1c913e03d1d14fd74fdbfb378475cb48b0d74d49 Mon Sep 17 00:00:00 2001 From: ilyutkin Date: Mon, 3 Jan 2022 16:42:07 +0300 Subject: [PATCH 4/8] PHP_SESSION_ID, cookie_id --- src/Tracker.php | 9 ++++ src/Vendor/Laravel/Models/Log.php | 1 + src/Vendor/Laravel/Models/Session.php | 1 + ...14_311104_add_cookie_id_to_tracker_log.php | 46 +++++++++++++++++++ ...105_add_session_id_to_tracker_sessions.php | 46 +++++++++++++++++++ ...change_tracker_cookies_uuid_length_512.php | 40 ++++++++++++++++ 6 files changed, 143 insertions(+) create mode 100644 src/migrations/2021_12_14_311104_add_cookie_id_to_tracker_log.php create mode 100644 src/migrations/2021_12_14_311105_add_session_id_to_tracker_sessions.php create mode 100644 src/migrations/2021_12_14_311106_change_tracker_cookies_uuid_length_512.php diff --git a/src/Tracker.php b/src/Tracker.php index fab00676..b7ae377c 100644 --- a/src/Tracker.php +++ b/src/Tracker.php @@ -174,6 +174,7 @@ public function getLogData() { return [ 'session_id' => $this->getSessionId(true), + 'cookie_id' => $this->getCookieId(), 'method' => $this->request->method(), 'path_id' => $this->getPathId(), 'query_id' => $this->getQueryId(), @@ -244,6 +245,7 @@ protected function logUntrackable($item) protected function makeSessionData() { $sessionData = [ + 'session_id' => session_id(), 'user_id' => $this->getUserId(), 'device_id' => $this->getDeviceId(), 'client_ip' => $this->request->getClientIp(), @@ -278,6 +280,13 @@ public function getUserId() : null; } + public function setUserId($user_id) + { + $session = $this->dataRepositoryManager->sessionRepository->getCurrent(); + $session->user_id = $user_id; + $session->save(); + } + /** * @param \Throwable $throwable */ diff --git a/src/Vendor/Laravel/Models/Log.php b/src/Vendor/Laravel/Models/Log.php index 1b62cd10..bb66f137 100644 --- a/src/Vendor/Laravel/Models/Log.php +++ b/src/Vendor/Laravel/Models/Log.php @@ -8,6 +8,7 @@ class Log extends Base protected $fillable = [ 'session_id', + 'cookie_id', 'method', 'path_id', 'query_id', diff --git a/src/Vendor/Laravel/Models/Session.php b/src/Vendor/Laravel/Models/Session.php index 2047b554..8dc63213 100644 --- a/src/Vendor/Laravel/Models/Session.php +++ b/src/Vendor/Laravel/Models/Session.php @@ -8,6 +8,7 @@ class Session extends Base protected $fillable = [ 'uuid', + 'session_id', 'user_id', 'device_id', 'language_id', diff --git a/src/migrations/2021_12_14_311104_add_cookie_id_to_tracker_log.php b/src/migrations/2021_12_14_311104_add_cookie_id_to_tracker_log.php new file mode 100644 index 00000000..368fa79f --- /dev/null +++ b/src/migrations/2021_12_14_311104_add_cookie_id_to_tracker_log.php @@ -0,0 +1,46 @@ +builder->table( + $this->table, + function ($table) { + $table->bigInteger('cookie_id')->unsigned()->index()->after('session_id'); + } + ); + } catch (\Exception $e) { + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function migrateDown() + { + $this->builder->table( + $this->table, + function ($table) { + $table->dropColumn('cookie_id'); + } + ); + } +} diff --git a/src/migrations/2021_12_14_311105_add_session_id_to_tracker_sessions.php b/src/migrations/2021_12_14_311105_add_session_id_to_tracker_sessions.php new file mode 100644 index 00000000..17094055 --- /dev/null +++ b/src/migrations/2021_12_14_311105_add_session_id_to_tracker_sessions.php @@ -0,0 +1,46 @@ +builder->table( + $this->table, + function ($table) { + $table->string('session_id')->after('uuid'); + } + ); + } catch (\Exception $e) { + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function migrateDown() + { + $this->builder->table( + $this->table, + function ($table) { + $table->dropColumn('session_id'); + } + ); + } +} diff --git a/src/migrations/2021_12_14_311106_change_tracker_cookies_uuid_length_512.php b/src/migrations/2021_12_14_311106_change_tracker_cookies_uuid_length_512.php new file mode 100644 index 00000000..9072ccf7 --- /dev/null +++ b/src/migrations/2021_12_14_311106_change_tracker_cookies_uuid_length_512.php @@ -0,0 +1,40 @@ +builder->table( + $this->table, + function ($table) { + $table->string('uuid', 512)->change(); + } + ); + } catch (\Exception $e) { + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function migrateDown() + { + } +} From d87704fee1e46874c08848c88b5e47fc56a84a70 Mon Sep 17 00:00:00 2001 From: ilyutkin Date: Mon, 3 Jan 2022 16:44:27 +0300 Subject: [PATCH 5/8] The visit ends when no new events arrive from the visitor for a certain time --- src/Data/Repositories/Session.php | 17 ++++++++++++++--- src/config/config.php | 5 +++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/Data/Repositories/Session.php b/src/Data/Repositories/Session.php index 779c4919..9318d8c6 100644 --- a/src/Data/Repositories/Session.php +++ b/src/Data/Repositories/Session.php @@ -98,11 +98,22 @@ private function sessionIsKnownOrCreateSession() } else { $session = $this->find($this->getSessionData('id')); - $session->updated_at = Carbon::now(); + if ($this->config->get('tracker_visit_close') && + (is_null($session->user_id)) && + ($session->updated_at < Carbon::now()->subMinutes($this->config->get('tracker_visit_close'))) + ) { + $this->resetSessionUuid(); - $session->save(); + $this->sessionSetId($this->findOrCreate($this->sessionInfo, ['uuid'])); - $this->sessionInfo['id'] = $this->getSessionData('id'); + $known = false; + } else { + $session->updated_at = Carbon::now(); + + $session->save(); + + $this->sessionInfo['id'] = $this->getSessionData('id'); + } } return $known; diff --git a/src/config/config.php b/src/config/config.php index 8bfabca4..90ec15e7 100644 --- a/src/config/config.php +++ b/src/config/config.php @@ -249,6 +249,11 @@ */ 'tracker_session_name' => 'tracker_session', + /* + * The visit ends when no new events arrive from the visitor for a certain time. + */ + 'tracker_visit_close' => 30, + /* * ** IMPORTANT ** * Change the user model to your own. From 119c8000ffd6752a123fc81d3f2dc0f848129fe4 Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 18 Jan 2022 12:59:01 +0300 Subject: [PATCH 6/8] ilyutkin/support --- composer.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 5242e7e3..1bdabae2 100644 --- a/composer.json +++ b/composer.json @@ -19,7 +19,7 @@ "php": ">=7.0", "doctrine/dbal": "^2.6", "laravel/framework": "~5|~6|~7|~8", - "pragmarx/support": "~0.6|~0.7|~0.8|~0.9", + "pragmarx/support": "dev-master", "ramsey/uuid": "^3 || ^4", "jenssegers/agent": "~2.1", "ua-parser/uap-php" : "~3.4", @@ -28,6 +28,13 @@ "jaybizzle/crawler-detect": "~1.0", "psr/log": "~1.0" }, + + "repositories": [ + { + "type": "git", + "url": "https://github.com/ilyutkin/support/" + } + ], "suggest": { "geoip/geoip": "~1.14", From 8714691050d2cc0f59202c09b2a8ce722c071275 Mon Sep 17 00:00:00 2001 From: Alexander Date: Tue, 18 Jan 2022 14:45:08 +0300 Subject: [PATCH 7/8] cookie_id --- .../2021_12_14_311104_add_cookie_id_to_tracker_log.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/migrations/2021_12_14_311104_add_cookie_id_to_tracker_log.php b/src/migrations/2021_12_14_311104_add_cookie_id_to_tracker_log.php index 368fa79f..e934a552 100644 --- a/src/migrations/2021_12_14_311104_add_cookie_id_to_tracker_log.php +++ b/src/migrations/2021_12_14_311104_add_cookie_id_to_tracker_log.php @@ -22,7 +22,7 @@ public function migrateUp() $this->builder->table( $this->table, function ($table) { - $table->bigInteger('cookie_id')->unsigned()->index()->after('session_id'); + $table->bigInteger('cookie_id')->unsigned()->nullable()->index()->after('session_id'); } ); } catch (\Exception $e) { From 8391cdf8af7ee4216a96ae9351c597f44f46aaa8 Mon Sep 17 00:00:00 2001 From: ilyutkin Date: Sun, 27 Feb 2022 14:33:08 +0300 Subject: [PATCH 8/8] Laravel 9 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 1bdabae2..6993f9ad 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "require": { "php": ">=7.0", "doctrine/dbal": "^2.6", - "laravel/framework": "~5|~6|~7|~8", + "laravel/framework": "~5|~6|~7|~8|~9", "pragmarx/support": "dev-master", "ramsey/uuid": "^3 || ^4", "jenssegers/agent": "~2.1",