Zjistit jak dlouho je uživatel přihlášen

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jezza03
Člen | 5
+
+1
-

Dobrý den,
potřeboval bych kontrolovat jak dlouho je uživatel přihlášen na stránce. Pokud se ale odhlásí, tak už by se to nemělo počítat, znova až při dalším přihlášení.

Tady mám svůj, ten mi hází pořád jen jedno číslo.

public function onlineTime() {
	if ($this->user->isLoggedIn()) {
		$lastTime = $this->userManager->getUserInfo($this->user->id)->onlinetime;
		$nowTime = new DateTime(date('Y-m-d H:i:s'));
		$lastTime = new DateTime(date('Y-m-d H:i:s', $lastTime));
		$onlineTime = $nowTime->diff($lastTime);
		$onlineTime = strtotime($onlineTime->format('Y-m-d H:i:s')) + strtotime($lastTime);
		$this->userManager->updateOnlineTime($onlineTime, $this->user->id);
	}
}

Tu funkci volám v base presenteru při každém strartupu.

Díky za odpověd.

Pavel Kravčík
Člen | 1196
+
-1
-

A co zjišťovat existenci session a její datum vytvoření přes fileinfo? Tos nezkoušel?

Myiyk
Člen | 321
+
0
-
  1. Session nemusí být jako soubor, jsou i jiné možnosti ukládání.
  2. Zároveň session může existovat aniž by byl uživatel přihlášen.

Editoval Myiyk (29. 7. 2015 15:19)

jezza03
Člen | 5
+
0
-

Když jsem na to používal sessions tak to fungovalo, bohužel i když byl uživatel odhlášen. Když jsem to nastavil aby se ta session při odhlášení smazala, tak se celý ten čas resetoval i v databázi.

Editoval jezza03 (29. 7. 2015 15:22)

Myiyk
Člen | 321
+
+1
-

Při přihlášení si ulož čas do databáze.

S každou další akcí, kterou uživatel udělá si aktualizuj čas poslední aktivity.

Čas poslední aktivity mínus čas přihlášení = doba, jak dlouho byl přihlášen.

Tu aktualizaci času poslední aktivity si dej do startup metody v base presenteru. Tím se bude aktualizovat při každé akci.

Editoval Myiyk (29. 7. 2015 15:24)

jezza03
Člen | 5
+
0
-

Chtělo to menší úpravu. Když jsem při přihlašování ukládal aktuální čas tak jsem od něj musel ještě odečíst celkový strávený čas uživatele, jinak to vždycky ten čas resetovalo. Díky.

Editoval jezza03 (29. 7. 2015 16:57)

Felix
Nette Core | 1247
+
0
-

Uplne nejjednodussi je to pres session jak uz nekdo psal.. Myslim, ze pokud si jako data vlozis cas vytvoreni, tak pokud Identitu nebudes aktualizovat, tak to jde dopocitat prece.

@jezza03 co ti na tom nefungovalo? Pro odhlaseni si pouzival $user->logout(TRUE)?

Myiyk
Člen | 321
+
0
-

Ano, to je dobrá možnost. Jednodušší než moje. Já jsem si myslel že se chce dívat na doby přihlášení všech uživatelů, proto jsem navrhl ukládání do databáze.