Jak správně pracovat s cookies?

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

Zdravím. Chci se zeptat, jak správně pracovat s cookies v Nette. Potřebuji v jednom presenteru ve funkci handleNeco() nastavit, případně dostat cookies.

Koukal jsem, že je na to funkce objektu HttpResponse->setCookie() a HttpRequest->getCookies(). Jak k nim přistoupím z presenteru? Jsou tam vůbec k dispozici? Moc nevím, jak tohle zabalování HTTP požadavků v Nette funguje, takže jsem možná úplně vedle. V tom případě bych vás poprosil o mírné nasměrování.

Díky moc

DocX
Člen | 154
+
0
-

Viz https://doc.nette.org/cs/http/request#…

Cookies jsou v Nette ale opravdu jen „zabalené“. Lze s nimy pracovat jako v jakékoli jiné PHP aplikaci.

Z presenteru k tomu přistoupíš přes getHttpResponse()

pmg
Člen | 372
+
0
-
$request = $this->getHttpRequest();	// v presenteru
$request = Environment::getHttpRequest();	// obecně

$value = $request->getCookie('key');

if ($value !== NULL) {
	// ...
}

// obdobně
$response = $this->getHttpResponse();
Martin Mates
Člen | 179
+
0
-

Díky moc!

Martin Mates
Člen | 179
+
0
-

Ještě se chci zeptat, jestli můžu v metodě handle{signal} sahat do cookies. Funguje mi to jen v action a v render. Jedná se mi o hlasování v anketě. Mohl bych to udělat i pomocí action, ale to pak nepůjde zajaxovatět.

Honza Marek
Člen | 1664
+
0
-

Martin Mates napsal(a):

Ještě se chci zeptat, jestli můžu v metodě handle{signal} sahat do cookies.

Proč ne?

Funguje mi to jen v action a v render.

Jakto?

Jedná se mi o hlasování v anketě.

hm

Mohl bych to udělat i pomocí action, ale to pak nepůjde zajaxovatět.

Proč ne?

Martin Mates
Člen | 179
+
0
-

Honza M. napsal(a):

Martin Mates napsal(a):

Ještě se chci zeptat, jestli můžu v metodě handle{signal} sahat do cookies.

Proč ne?

Funguje mi to jen v action a v render.

Jakto?

Jedná se mi o hlasování v anketě.

hm

Mohl bych to udělat i pomocí action, ale to pak nepůjde zajaxovatět.

Proč ne?

  1. V metodě handleHlasovat() příkaz

$this->getHttpResponse()->setCookie('hlasovani', 'test', 60 * 60); neudělá nic. Když ho přendám do metody renderNeco() tak už se ta cookie nastaví. Proto mě napadlo, že to v handle nejde.

  1. Myslel jsem si, že jednoduše zajaxovatět aplikaci jde v Nette jen pomocí handlerů handle{signal}.