SESSION nepochopitelne nejde…
- SquirrelCZE
- Člen | 15
zdravim, zacinam s nette a mam tu problem u ktereho totalne nevim
proc?.
Nasledujici kod byl daleko obsahlejsi, ovsem kvuli nefunkcnosti jsem to musel
osekat co nejvic… bohuzel nepomohlo :(
<?php
class ProfilePresenter extends BasePresenter{
public function actionDefault(){
}
public function renderDefault(){
$session = Environment::getSession('User');
$this->template->data = $session->data;
}
public function createComponentLoginForm($name){
return new LoginForm($this,$name);
}
public function loginFormSubmitted(AppForm $Form){
new Login($Form->Email,$Form->Pass);
$this->redirect('default');
}
}
?>
<?php
class Login {
public function _construct($email,$pass){
$session = Environment::getSession('User');
$session->setExpiration('+ 14 days');
$session->data = "test";
//dibi::query('SELECT * FROM [users] LIMIT 1')->fetch();;
}
}
?>
po XY precteni jsem nenasel zadnou chybu… :( P.S: problem je ze se v template nevypise nic …
- Honza Kuchař
- Člen | 1662
// Dej někam do BasePresenteru
if(!Environment::getSession()->isStarted()){
Environment::getSession()->start();
}
- Honza Kuchař
- Člen | 1662
22 napsal(a):
tak mě napadá, proč si vlastně Nette nestarutuje Session samo a musí se to dělat manuálně?
Session zamyká všechny ostatní vlákna. (pro daného uživatele) Myslím, že je dobře, že si ji člověk musí nastartovat sám. Ale… https://forum.nette.org/…-verze-0-9-4
@DG: při spuštení Nette\Application se automaticky nastartuje session, je-li přítomno session-ID
- Honza Kuchař
- Člen | 1662
bazo napsal(a):
SquirrelCZE napsal(a):
problem je ze se v template nevypise nic …a co mas v template?
Viděl bych to na laděnku v produkčním režimu. (a vyletěla výjimka)
Buť do bootstrapu přidej
Environment::setMode("production",false);
nebo
Debug::enable(Debug::DEVELOPMENT)
nebo si prohlídni logy.
- 22
- Člen | 1478
honzakuchar napsal(a):
22 napsal(a):
tak mě napadá, proč si vlastně Nette nestarutuje Session samo a musí se to dělat manuálně?
Session zamyká všechny ostatní vlákna. (pro daného uživatele) Myslím, že je dobře, že si ji člověk musí nastartovat sám. Ale… https://forum.nette.org/…-verze-0-9-4
@DG: při spuštení Nette\Application se automaticky nastartuje session, je-li přítomno session-ID
..teď moc nerozumím, co myslíš tím zamykaním vláken?? Můžeš to laikovi nějak osvětlit. Co se týká 0.9.4, tak co mi vyřeší autostart, když je PHPSESSID? Stejně budu muset ověřit, jestli ID existuje a eventuelně opět spustit, pokud neexistuje..
Editoval 22 (14. 4. 2010 22:06)
- Honza Kuchař
- Člen | 1662
No fajn. Prostě session startuj v BasePresenteru.(slovy: tečka)
Zamykání vláken od jednoho uživatele
Dej si do presenteru:
// Předpokládá vypnutou session
renderTest(){
sleep(10);
}
renderTestSession(){
Environment::getSession()->start();
$this->renderTest();
}
Otevři si jedřív tu 1. stránku do dvou prohlížečů. Poté si otevři
tu druhou do obou prohlížečů. A co zjistíš. Tak 1. stránka se načetla
v obou prohlížečích za cca. 10 sekund. Ale v druhém testu jsi zjistil,
že se ti v 1. prohlížeči načetla za cca. 10 sekund a v druhém za cca.
20 sekund. Proč? seesion zamkne všechny ostatní vlánkna, kromě toho
svého. Explicitně co můžeš zrušit
pomocé Environment::getSession()->close();
Omlouvám se za hromadu překlepů. Neumím moc psát rychle.
Editoval honzakuchar (14. 4. 2010 22:52)
- SquirrelCZE
- Člen | 15
ok, takze jsem upravil base presenter:
<?php
abstract class BasePresenter extends Presenter
{
public $oldLayoutMode = FALSE;
public function __construct(){
if(!Environment::getSession()->isStarted()){
Environment::getSession()->start();
}
parent::__construct();
}
public function afterRender(){
if($this->isAjax() && $this->hasFlashSession()){
$this->invalidateControl('flashes');
}
}
?>
- do booststrapu jsem pridal Debug::enable(Debug::DEVELOPMENT);
@{block content}
{snippet form}
{control loginForm}
{/snippet}
{$data}
{/block}
zde je template, jedine co mne dneska jeste napadlo je jestli to nemuze byt
na strane serveru? mam totiz na localhostu XAMPP, bez nastavovani!
P.S: kdyz v presenteru udelam: „echo $session->data;“ tak mi to vypise:
call to undefined variable
Editoval SquirrelCZE (15. 4. 2010 15:46)
- SquirrelCZE
- Člen | 15
mno, potom se tedy zeptam proc?
kdyz ho v Login() definuju, priradim hodnotu … (v nastavene slozce se objevi
novy soubor), a pak ho nasledne zavolam a hodnota mi nejde nacist?
prosel jsem si kod xy a nemuzu najit v cem je problem :(
- SquirrelCZE
- Člen | 15
mam, v prohlizeci vidim cookie PHPSESID …, vyzkousel jsem na serveru zapnout use_only_cookies, nepomohlo
EDIT: zde je cely project: http://squirrel.mysteria.cz/squirrel.rar P.S: na url je jinak hodne stara verze meho webu, takze tu nereste :)
Editoval SquirrelCZE (15. 4. 2010 18:56)