Cookies – neukladaji se globalne ale pouze v ramci presenteru

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

Ahoj,
uz asi treti hodinou resim nasledujici problem:

pomoci ajaxu menim hodnotu cookie, nabyva hodnot „hidden“ nebo „visible“.

Zpracovam to ve funkci

<?php
/*
	* signal for setting status of userPart visibility
	* @param string visibility (hidden/visible)
	*/
	public function handleUserpart($visibility) {
		$this->setLayout(false);
		$httpResponse = /*Nette\*/Environment::getHttpResponse();
		$httpResponse->setCookie('userPartVisibility', $visibility, 14 * 24 * 60 * 60);

		$this->terminate();
	}
?>

Problem je, ze se mi Cookie nastavi vzdy pouze pro aktualni presenter, ale ja ji potrebuji globalni (tak, jak to ma byt).

odkaz (pres ktery posilam subrequest) ma „href“: /presenter/?do=userPart
funkce v jQuery je nasledujici:

<script>
$(document).ready(function() {
	$("#hider").click(function() {
		if($("#user_part").attr('class') == 'hidden') {
			$("#user_part").animate({
				"top": "0"}, "slow");

			$("#user_part").removeClass("hidden");
			$("#user_part").addClass("visible");

			$.get(this.href, {"visibility": "visible"});
		} else {
			$("#user_part").animate({
				"top": "-85"}, "slow");

			$("#user_part").removeClass("visible");
			$("#user_part").addClass("hidden");

			$.get(this.href, {"visibility": "hidden"});
		}

		return false;
	});
});
</script>

Zjistil jsem, ze kdyz jsem v presenteru Groups, signal ma url /groups/?do=userPart, ale kdyz url zmenim rucne na /meets/?do=userPart a kliknu, zmena cookie se provede pouze v /meets, nikoliv v /groups. Takze co presenter, to jina hodnota cookie.

Muze mi nekdo zkusenejsi rict, v cem muze byt chyba?

Diky za Vas cas, jsem s pozdravem
Michal Sevcik

Editoval MelkorNemesis (30. 12. 2009 15:50)

Rampa
Člen | 65
+
0
-

možná, že se uplně pletu, ale mohl by být problem v setování cookie.
Expirace se zadává v unix timestamp. Takže správně by to mělo být:

<?php
setCookie('userPartVisibility', $visibility, time()+14 * 24 * 60 * 60);
?>

myslím, že u tebe se to číslo převede na timestamp, dostaneš hodnotu v minulosti a cookie se hned expiruje.

A nebo je všechno jinak :)

MelkorNemesis
Člen | 36
+
0
-

Rampa napsal(a):

možná, že se uplně pletu, ale mohl by být problem v setování cookie.
Expirace se zadává v unix timestamp. Takže správně by to mělo být:

<?php
setCookie('userPartVisibility', $visibility, time()+14 * 24 * 60 * 60);
?>

myslím, že u tebe se to číslo převede na timestamp, dostaneš hodnotu v minulosti a cookie se hned expiruje.

A nebo je všechno jinak :)

nene, v setCookie(){} je napsano

<?php
if (is_string($expire) && !is_numeric($expire)) {
			$expire = strtotime($expire);

		} elseif ($expire > 0 && $expire <= Tools::YEAR) {
			$expire += time();
		}
?>

takze pokud tam je nejake cislo, tak se k tomu pricte time();, ale to, ze by cookie hned vyexpirovala je stejne blbost, protoze to nastaveni ulozene v cookie se porad uchovava na webu. Tzn. ten prvek je viditelny/neviditelny podle toho, jak sem si ho nastavil a porad v ramci presenteru :(.

Edit: Ted jsem zkousel udelat counter v cookie, dal sem to do BasePresenteru do startUp(), a nasledne v Presenterech si to vypisuju a to same, pro kazdy presenter mam counter s vlastni hodnotou, ikdyz oba dedi BasePresenter. Je to vubec chyba nette, popr. kde jinde by mohla byt?

Pomohlo by mi ted aspon vypnuti expirace session pri vypnuti prohlizece – coz take nejak nefunguje.

Diky vsem

Editoval MelkorNemesis (30. 12. 2009 15:51)