Práce se session a jeho fungování

DETAIL
Člen | 33
+
0
-

Chtěl bych se zeptat jak přesně fungují session v NETTE, protože v návodu je sice popsané, že je to rozdělené na sekce a jak se k nim dostat, ale nevím jak se to přesně ukládá a jak to používat. Zkoušel jsem si postupně všechny classy vypisovat, ale data lze číst až když dojdu přímo k proměnné.

//prezenter
$session = $this->getSession();
//\Tracy\Debugger::dump($session);
$sessionSection = $session->getSection('aktualniZarizeni');
$sessionSection->ID_zarizeni = $this->ID;

A ještě se zeptám jestli jde nějak upravovat identita. Po přihlášení si tam uložím data a nejraději bych tam měl i to aktuální zařízení, ale nejspíš je jenom pro čtení.

A poslední věc jestli se všechny tyto data smažou po odhlášení, když mám.

	public function actionOut(): void
	{
		$this->getUser()->logout(true);
	}

Děkuji za vysvětlení

Polki
Člen | 553
+
0
-

Session je nějaký úložný prostor. O to, aby ses o něj nemusel starat ty ručně jsou v Nette knihovny, které to dělají za tebe.

$this->getSession(); // Získá celou session, tedy nějaké úložiště a instanci třídy nad ním, která je zodpovědná za ukládání a načítání dat. Jelikož jde o Session, tak toto úložiště je specifické pro konkrétní POČÍTAČ, na kterém se web prohlíží
$session->getSection('aktualniZarizeni'); // Úložiště je ještě rozděleno na tzv. sekce. Je to kvůli kolizím názvů. Když vyrobíš nějakou knihovnu, měla by si zvolit vlastní unikátní název sekce, aby se nestalo, že bude přepisovat data někomu jinému. Jde tedy o něco, jako novou proměnnou uvnitř celé Session, nebo chceš-li podsložku.
$sessionSection->ID_zarizeni = $this->ID; // každá sekce může v sobě mít libovolný počet proměnných, kde každá má své unikátní jméno. Na pozadí tyto proměnné neexistují, dokud k nim nepřistoupíš. Tedy proměnná 'ID_zarizeni' neexistuje, ale začne existovat až jakmile do ní uložíš to tvé '$this->ID' když se z neexistující proměnné v rámci sessionSection pokusíš číst, tak Nette vrátí null, případně vyhodí vyjímku (záleží na nastavení)

To, kam a jak to ukládá si myslím nepotřebuješ vědět, dokud si nechceš psát vlastní SessionStorage.
Pomocí ‚->logout(true)‘ se pak pouze smaže identita, ne data v session. Chceš-li mazat data v session, musíš jim buď nastavit expiraci, nebo je vymazat ručně pomocí $sessionSection->ID_zarizeni = null; nebo unset($sessionSection->ID_zarizeni);
Stejně tak můžeš klidně smazat celou sekci. Vše je v dokumentaci.
Jinak o session a její konfiguraci se dočteš zase v dokumentaci: https://doc.nette.org/cs/configuring#…

Identitu můžeš upravovat takto:
Úložiště: https://doc.nette.org/cs/configuring#…
Načtení a uložení identity: https://blog.nette.org/…security-3-1