Předávání hodnot session
- symmetry
- Člen | 71
Zdravím, jelikož s Nette začínám, využívám v drtvivé většině
pouze třídu forms, na dlaší věci používám dibi a své metody.
Narazil jsem ale na problém při předávaní hodnot session.
Po autorizaci a přidělení příst práv uživateli, se snažím přejít na jinou stránku, kde chci vypsat hodnoty session a pracovat s nimi.
<?php
include './class_users.php';
$user = new Users();
$user->AccessProtect();
$a = $_SESSION["is_logged"];
$b = $_SESSION["identity"];
echo $a;
echo $b;
?>
Bohužel se mi ale nepodaří je tímto klasickým postupem vypsat hodnotu session.
Ve formuláři je vytvoření session zpracováno takto:
<?php
include './libs/nette-0.9-PHP-5.2/Nette/loader.php';
include './db_connect.php';
include './class_users.php';
//In production version must be unlinked
Debug::enable();
//Creating form
$form = new Form;
$form->addGroup('Login');
$form->addText('email', 'Mail:')
->setEmptyValue('')
->addRule(Form::FILLED, 'Vlozte svuj mail pro login')
->addRule(Form::EMAIL, 'Zadejte prosím mail pro login');
$form->addText('password', 'Heslo:')
->setEmptyValue('connec')
->addRule(Form::FILLED, 'Zadejte prosím heslo');
$form->addSubmit('send', 'Odeslat');
//End of form
if($form ->isSubmitted()&&$form ->isValid())
{
//Geting values from form
$mail = $form['email']->getValue();
$passwd = $form['password']->getValue();
$user = new Users();
//Inserting returned values from methods
$is_logged = $user->AuthenticateUser($mail,$passwd);
$identity = $user->AssignUserIdentify($mail,$passwd);
//Verifying user identity
if($is_logged==1&&is_numeric($identity))
{
$_SESSION['is_logged']=1;
$_SESSION['identity']=$identity;
header('Location: admin.php');
echo('ok');
}
else
{echo("Nexistujici uzivatel nebo spatne heslo?");}
}
else
{
$form->getErrors();
}
?>
Pokud by někdo tušil, jak to vyřešit, nebo jak to udělat lépe v Nette(pokud možno s nějakým názorným příkladem) budu moc vděčný.
- norbe
- Backer | 405
Je možné, že Nette ze sessions odstraní hodnoty které samo nevytvořilo… Zkus podívat jak se práce se sessions řeší přímo v nette: Nette\Web\Session
- symmetry
- Člen | 71
Ach so, to je ale docela zákeřný:) Co jsem ale z API nette/session
nepochopil je to. Jak vlastně session jako takovou zaregistruji a přiřadím
jí hodnotu.
Pokud napíši něco takového, tak sice inicializuji session ale již ji
nepřiřadím například hodnotu z proměnné.
$session = Environment::getSession();
$session->setName(‚uuubbu‘);
- norbe
- Backer | 405
Úplně jednoduše :-) Všechno je té tránce co jsem postoval výše.
Malá ukázka:
$session = Environment::getSession('autentizace');
$session->cokoliChces = "tvoje data";
// pak můžeš i testovat, jestli už daná proměnná v namespacu existuje
if(!isset($session->cokoliChces))
$this->redirect("Auth:login");
- symmetry
- Člen | 71
Jasny,
session nastavim a vypisu.
<?php
$namespace = Environment::getSession('user_identity');
$namespace->user_identity = 'ales';
echo $namespace->user_identity;
?>
Ale pokud si ji chci prenest do dalsi stranky, musim zavolat
<?php
$namespace = Environment::getSession('user_identity');
echo $namespace->user_identity;
?>
Coz mi prijde docela neprakticke, je nejaky jednodussi zpusob, jak prenaset hodnoty session?
Editoval symmetry (9. 11. 2009 12:57)