Cookies – neukladaji se globalne ale pouze v ramci presenteru
- MelkorNemesis
- Člen | 36
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
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
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)