abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 21:11 | Humor

    Kdo chce podpořit společnost Nintendo v jejím boji proti open source softwaru (Ryujinx, yuzu, …), může si koupit Nintendo budík Alarmo za 100 dolarů. Za jak dlouho bude na budík naportován Doom?

    Ladislav Hagara | Komentářů: 5
    včera 14:11 | Humor

    Včera měl na Maxu premiéru film Money Electric: The Bitcoin Mystery (Tajemství Bitcoinu). Tvrdí, že Satoshi Nakamoto je bitcoinový vývojář Peter Todd. Ten to odmítá.

    Ladislav Hagara | Komentářů: 3
    včera 12:44 | Zajímavý projekt

    Tým soulscircuit pracuje na open source přenosných počítačích pilet 5 console a pilet 7 tablet postavených na Raspberry Pi 5. V plánu mají kampaň na Kickstarteru.

    Ladislav Hagara | Komentářů: 4
    včera 12:22 | IT novinky

    Soud ve Spojených státech nařídil společnosti Google, aby otevřela svůj obchod s aplikacemi Google Play konkurenci. Uživatelé systému Android mají získat více možností stahovat aplikace a platit za transakce v nich uskutečněné. Rozsudek navazuje na loňský verdikt poroty týkající se tvůrce hry Fortnite, firmy Epic Games.

    Ladislav Hagara | Komentářů: 23
    včera 12:11 | Nová verze

    Mastodon (Wikipedie), svobodná federalizovaná sociální síť, byl vydán ve verzi 4.3. Vylepšena byla správa notifikací i vlastní vzhled.

    Ladislav Hagara | Komentářů: 1
    včera 02:22 | Komunita

    Organizace Free Software Foundation Europe u příležitosti včerejšího Dne Ady Lovelace vydala pod licencí CC BY-SA (Uveďte původ - Zachovejte licenci) půlhodinový animovaný film Ada & Zangemann - Příběh softwaru, skateboardů a malinové zmrzliny vycházející ze stejnojmenné knížky (online verze ve francouzštině).

    Ladislav Hagara | Komentářů: 0
    8.10. 22:33 | Nová verze

    Byla vydána nová verze 1.11.0 dynamického programovacího jazyka Julia (Wikipedie) určeného zejména pro vědecké výpočty. Přehled novinek v příspěvku na blogu a v poznámkách k vydání. Aktualizována byla také dokumentace. S vydáním verze 1.11 se předchozí verze 1.10 stala novou LTS verzí nahrazující verzi 1.6.

    Ladislav Hagara | Komentářů: 0
    8.10. 20:11 | Nová verze

    Byla vydána nová verze 6.8 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.5.6.

    Ladislav Hagara | Komentářů: 0
    8.10. 15:44 | Nová verze

    Byla vydána nová stabilní verze 6.8 (YouTube) multiplatformního frameworku a GUI toolkitu Qt. Podrobný přehled novinek v poznámkách k vydání. Jedná se o LTS verzi. Pro komerční uživatele byla prodloužena podpora ze 3 na 5 let.

    Ladislav Hagara | Komentářů: 0
    8.10. 15:22 | Nová verze

    Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.2 (Mastodon, 𝕏). Přehled novinek i s videi a se snímky obrazovky v oficiálním oznámení. Podrobný přehled v seznamu změn.

    Ladislav Hagara | Komentářů: 8
    Rozcestník

    Dotaz: chyba při předávání session

    Smelik Martin avatar 24.7.2011 19:21 Smelik Martin | skóre: 5
    chyba při předávání session
    Přečteno: 670×
    Mám takovýto problém.
    Mám skript v PHP který začíná takto
    session_start();
    if(!isset($_SESSION["login"]["ID"]) && !isset($_SESSION["login"]["authority"]))
    {
        header('Location: index.php');
    }
    
    při zpracování formuláře přesměruju stránku na skript neco.script.php kde se provede zpracovani dat a zpet se presmeruje na puvodni skript. Problém je v tom že nevím z jakého důvodu se jakýmsi způsobem vymaže hodnota nastavená v $_SESSION["login"]["authority"] a skript mě automaticky odhlasi ze systemu z bezpecnostnich duvodu.

    Zacatek neco.script.php je klasika session_start();

    Nemá s tím někdo zkušenosti? Nemůžu nějak najít důvod proč se mi vymaže hodnota z session.

    Řešení dotazu:


    Odpovědi

    24.7.2011 20:44 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Řekl bych, že otázka je poněkud obecná nebo spíše hodně široká.

    Mizí hodnota pouze ze $_SESSION["login"]["authority"] a v $_SESSION["login"]["ID"] zůstává? Nebo se zruší všechny hodnoty v $_SESSION? Co vlastně se $_SESSION["login"]["authority"] skript neco.script.php provádí? Nemažete si ji někde sám?
    Smelik Martin avatar 24.7.2011 20:56 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    hodnota mizí pouze s authority a je v ni uloženo oprvněnní které uživatel má v systému.

    neco.script.php vypadá třeba takto ¨
    session_start();
    if(!isset($_SESSION["login"]["ID"]) && !isset($_SESSION["login"]["authority"]))
    {
        header('Location: ../index.php');
    }
    
    include "../include/config.inc.php";
    include "../class/mysql.class.php";
    include "../include/function.inc.php";
    
    //Inicializace db spojení
    $db = MySQL::instance();
    $db->connect(HOST,DB,USER,PASS);
    
    if(isset($_POST["empl"]))
    {
    	if($_POST["mesic"]!="" || $_POST["rok"]!="")
    	{
    		header('Location: ../view.php?page=mes-vyp-hod&mesic='.$_POST["mesic"].'&rok='.$_POST["rok"].'&empl='.$_POST["empl"].'');
    		exit;
    	}
    	else
    	{
    		header('Location: ../view.php?page=mes-vyp-hod&empl='.$_POST["empl"].'');
    		exit;
    	}	
    }
    header('Location: ../view.php?page=mes-vyp-hod');
    24.7.2011 21:11 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Tak na první pohled ve skriptu nic špatného nevidím (až na chybějící exit v první podmínce, ale tam by se skript stejně neměl dostat).

    A má $_SESSION["login"]["authority"] na konci tohoto skriptu stále stejnou hodnotu (čili neměníte ji například ve vkládaných skriptech)?
    Smelik Martin avatar 24.7.2011 21:16 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    neměním. session authority se nastaví při přihlášení a celým procesem uživatelova pohybu na stránkách je nedotčená. jen na jejím základě ověřuji oprávnění do daných sekcí.
    24.7.2011 21:03 Kit
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Mně to normálně funguje. Při prvním zavolání zahlásí chybu, při druhém a dalším OK.
    session_start();
    if(!isset($_SESSION["login"]["ID"]) && !isset($_SESSION["login"]["authority"])) {
      echo("Chyba");
    } else {
      echo("OK");
    }
    $_SESSION=Array("login");
    $_SESSION["login"]["ID"]="jmeno";
    $_SESSION["login"]["authority"]="auth";
    Změnil bych operátor && na ||, pokud musí být splněno obojí. Nebo stačí, když je splněna jen jedna z podmínek?

    BTW: Lidi, dávejte ty výpisy programů do značek <pre>. Kdo to má luštit?
    Smelik Martin avatar 24.7.2011 21:12 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Problém je v tom že při prvním přihlášeni od zavření okna prohlížeče to vždycky odhlásí a pak už to bývá v pohodě. Je to docela divné chování.Jinak výpis byl ve značce pre... a ja to vidim normalně
    Smelik Martin avatar 24.7.2011 21:15 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    A problém není v tom že ve skriptu neco.script.php by nebyly hodnoty session uložené ale v tom že při zpětném přesměrování na skript odkud jsem posílal data se ta hodnota vymaže...

    tzn... mam pokus.php kde zpracuju formulář a v hodnotě session mám uložené id a id oprávnění. Pošlu formulař ke zpracovani na skript neco.script.php kde se formulář zpracuje jak má a stále mám v session uložené id a id oprávnění. Po zpracovani formuláře se přesměruji zpět na původní skript pokus.php kde už ovšem není nastavené session authority a tudíž mě skript automaticky odhlásí z bezp. důvoduů.... nechapu kde se ta session vymaže. když jsem to trasoval s http watcherem vždy došlo k odhlášení až na skriptu pokus.php

    24.7.2011 21:26 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Pak mě osobně napadá asi už jen jedno jediné - máte PHPSESSID ve všech skriptech stejné? Nehrajete si někde k Cookies?
    24.7.2011 21:28 Kit
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Jenže tu podmínku máš špatně, patří tam operátor ||. Tak jak to máš, stačí pro pokračování programu splnění alespoň jedné z nich. To znamená, že nemáš ani ID.

    Zkus se podívat, jestli _SESSION nastavuješ správně v hlavním skriptu. Ve funkci to fungovat nebude.
    24.7.2011 21:31 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Ale je také pravda, že pokud máte v neco.script.php nastavenou podmínku
    if(!isset($_SESSION["login"]["ID"]) && !isset($_SESSION["login"]["authority"])) { header('Location: index.php'); }
    tak skript proběhne i když není $_SESSION["login"]["authority"] definována (stačí, že je definována $_SESSION["login"]["ID"] a tudíž podmínka není splněna). A pokud ve skriptu pokus.php máte tuto podmínku jinak nastavenou, je to problém..
    Smelik Martin avatar 24.7.2011 21:34 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    pokud vím tak && je logický součin. Tedy znamená že musí být obě hodnoty pravdivé aby se podmínka vyplnila. A když napíšu !isset()tak to znamená že není nastavena ... poté tedy nechápu váš komentář.
    24.7.2011 21:43 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Ano, ale Vy testujete NEnastavení těch dvou podmínek. Čili, aby podmínka byla pravdivá, nesmí být ani $_SESSION["login"]["ID"] ani $_SESSION["login"]["authority"] nastaveno. Ale jakmile jedna z nich je, podmínka již neplatí, což ve Vašem případě znamená, že skript běží dál i za podmínky, že třeba

    $_SESSION["login"]["ID"] = 25

    a $_SESSION["login"]["authority"] není vůbec definováno.

    Protože isset($_SESSION["login"]["ID"]) == true, tak už celá Vaše podmínka je nepravdivá...
    Smelik Martin avatar 24.7.2011 21:47 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Takže správným řešením je

    if(!isset($_SESSION["login"]["ID"]) || !isset($_SESSION[login]["authority"]))

    24.7.2011 21:56 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Ano, pokud chcete, aby obě hodnoty byly hned od začátku definované.

    A máte tedy $_SESSION["login"]["authority"] hned v úvodním skriptu (pokus.php) a i dále (neco.script.php) definovanou? Co například
    var_dump($_SESSION["login"]["authority"])
    nebo rovnou
    var_dump($_SESSION)
    ?
    24.7.2011 21:48 Kit
    Rozbalit Rozbalit vše Re: chyba při předávání session
    To znamená, že chyba se zahlásí pouze v případě, že není nastavena proměnná ID a zároveň není nastavena proměnná authority.

    Pokud alespoň jedna z proměnných existuje, skript pokračuje dál bez odhlášení. Je to tak správně?
    Smelik Martin avatar 24.7.2011 21:50 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Má to být tak že v případě kdy neexistuje alespoň jedna z proměných tak se provede podmínka. tzn původní řešení by mělo být správně...
    24.7.2011 21:57 Kit
    Rozbalit Rozbalit vše Re: chyba při předávání session
    "alespoň jedna" znamená logický součet, tedy ||.

    Jestliže neexistuje jedna_proměnná NEBO neexistuje druhá_proměnná, proveď přihlášení.

    Tady snad nefungují De Morganovy zákony?
    Smelik Martin avatar 24.7.2011 22:04 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Ano podmínka byla špatně nícméně to pořád neřeší proč když v pokus.php session jsou obě nastavené správně a potvrdil jsem si to výpisem session pomocí print_r($_SESSION). proč při odeslání formuláře který se zpracovaava v neco.script.php už hodnoty session nastavené nejsou....
    24.7.2011 22:11 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Čili jsou celé $_SESSION prázdné nebo jenom $_SESSION["login"]["authority"]?
    Smelik Martin avatar 24.7.2011 22:13 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    momentálně mi to vypisuje array() tzn. jsou obě prázdné..
    24.7.2011 22:16 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    To vypadá na nějakou chybu v posloupnosti úkonů... Přidejte sem ještě kód z pokus.php, prosím.
    Smelik Martin avatar 24.7.2011 22:19 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    CheckAuthorityToSection($_SESSION["login"]["authority"],$page);
    
    
    if($page == "sestaveni" && $authen == true)
    {	
    	
    	//Nejprve je třeba vybrat zaměstnance
    	$form = new FormularBuilder();
    	$form->FormStart($root."scripts/empl_prirazeni_set.script.php", "post","","vyber_zamestnance");
    	$form->FormSelectOptionIdInValue("Zaměstnanec", "add_empl", $zam, $zamID,1,$zE);
    	$form->FormHiddenItem($_GET["mesic"],"mesic");
    	$form->FormHiddenItem($_GET["rok"],"rok");
    	$form->FormSubmitButton("Vybrat");
    	$form->FormEnd();
    	
    		
    }
    else if($page == "sestaveni" && $authen == false)
    {
    	echo "
    "; echo "Nemáte přístup do této sekce"; echo "
    "; } include "include/footer.php"; ?>
    Smelik Martin avatar 24.7.2011 22:21 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    session_start();
    if(!isset($_SESSION["login"]["ID"]) || !isset($_SESSION["login"]["authority"]))
    {
        header('Location: index.php');
    }
    
    include "include/header.php";
    include "include/sidebar.php";
    
    //Inicializace oprávnění
    $access = new AuthorityManager();
    $authen = $access->CheckAuthorityToSection($_SESSION["login"]["authority"],$page);
    
    
    if($page == "sestaveni" && $authen == true)
    {	
    	
    	//Nejprve je třeba vybrat zaměstnance
    	$form = new FormularBuilder();
    	$form->FormStart($root."scripts/empl_prirazeni_set.script.php", "post","","vyber_zamestnance");
    	$form->FormSelectOptionIdInValue("Zaměstnanec", "add_empl", $zam, $zamID,1,$zE);
    	$form->FormHiddenItem($_GET["mesic"],"mesic");
    	$form->FormHiddenItem($_GET["rok"],"rok");
    	$form->FormSubmitButton("Vybrat");
    	$form->FormEnd();
    	
    		
    }
    else if($page == "sestaveni" && $authen == false)
    {
    	echo "
    "; echo "Nemáte přístup do této sekce"; echo "
    "; } include "include/footer.php";
    24.7.2011 22:17 Kit
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Protože $_SESSION definuješ uvnitř funkce.
    Smelik Martin avatar 24.7.2011 22:27 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    I kdyby tak to neřeší ten problém že ve skriptu pokus.php session je nastavené a při odeslání formuláře pomocí POST na skript neco.script.php se data ze session ztratí....
    24.7.2011 22:33 Kit
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Pokud je $_SESSION lokální, tak se nemůže odeslat.

    Tady však začínám mít tušení, že po odeslání dat metodou POST neděláš v navavazujícím skriptu po jejich zpracování header('Location...
    Smelik Martin avatar 24.7.2011 22:35 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Tento skript zpracuje například formulář...

    session_start();
    if(!isset($_SESSION["login"]["ID"]) || !isset($_SESSION["login"]["authority"]))
    {
        header('Location: ../index.php');
        exit;
    }
    
    include "../include/config.inc.php";
    include "../class/mysql.class.php";
    include "../include/function.inc.php";
    
    //Inicializace db spojení
    $db = MySQL::instance();
    $db->connect(HOST,DB,USER,PASS);
    
    if(isset($_POST["empl"]))
    {
    	print_r($_SESSION);
    	if($_POST["mesic"]!="" || $_POST["rok"]!="")
    	{
    		header('Location: ../view.php?page=mes-vyp-hod&mesic='.$_POST["mesic"].'&rok='.$_POST["rok"].'&empl='.$_POST["empl"].'');
    		exit;
    	}
    	else
    	{
    		header('Location: ../view.php?page=mes-vyp-hod&empl='.$_POST["empl"].'');
    		exit;
    	}	
    	
    	
    }
    header('Location: ../view.php?page=mes-vyp-hod');
    
    
    24.7.2011 22:49 Kit
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Tak teď už mě napadá jen: Děláš header('Location... i po zpracování přihlášení (ověření autenticity a vyrobení $_SESSION)?
    Smelik Martin avatar 24.7.2011 22:52 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Ano. Přihlášení a nastaveni session proběhne ve skriptu auth.script.php ze kterého se přesměruje na uvodni stranku info.php pomoci header('Location ../info.php');

    25.7.2011 01:06 Miloš
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Pořád mi není jasné, jak jsou $_SESSION["login"] vlastně tvořeny a kdy jsou tvořeny. V uvedených skriptech je nevidím. Pokud při prvním přihlašení se nedaří nic zapsat a při druhém ano, řekl bych že se data do $_SESSION["login"] zapsala ne ve skriptu pro přihlášení, ale někde jinde. Používáte vůbec při odhlašování session_destrox()? A proč Vám chybí v této větvi
    if(!isset($_SESSION["login"]["ID"]) || !isset($_SESSION["login"]["authority"]))
    {
        header('Location: index.php');
    }
    exit?

    Celé to na mě působí, že session_start() v přihlašovacím skriptu voláte až poté, co jste vložil data do $_SESSION["login"].

    Pokud to totiž chápu správně, tak dejme tomu na stránce enter.php uživatel vloží své přihlašovací údaje, kde je formulář odešle na auth.script.php. Po ověření správnosti se vytvoří $_SESSION["login"] a uživatel je přesměrován na info.php. Zde nějaký způsobem může vybrat pokus.php, který odesílá data na neco.script.php, kde by se pak měl vrátit zpět na pokus.php.

    A teď je podstatné, co se vlastně po prvním přihlášení děje. Tvrdíte, že
    Když vypnu a zapnu prohlížeč pokusím se zapsat něco a přesměruju se na neco.script.php tak session nastavené není. Tzn vrátím se zpět. Odhlásím se přihlásím se znovu a znovu se pokusím zapsat něco a přesměruje mě to na neco.script.php tak už session nastavené je správně a všechno je ok
    , čili je podle mého podstatné, i jakým způsobem probíhá odhlašování ze systému.

    Vložte sem tedy, prosím, ještě část skriptu auth.script.php, kde bude vidět, jakým způsobem $_SESSION["login"] vytváříte a i skript pro odhlášení, ať je vidět, jak se odhlašujete. A znovu opakuji, proč Vám chybí za header() exit?
    Smelik Martin avatar 25.7.2011 10:04 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Přihlašování probíhá ve skriptu auth.script.php kde zavolam třídu auth.class.php a použiju tři metody...

    public function CheckAuthorizationWithAuthority($login,$pass)
    	{
    		/**
    		 * SQL dotaz, který ověření nejprve uživatele a poté oprávnění
    		 */
    		$sql = "select * from users where login='".$login."' and pass='".$pass."'";
    		$vysledek = $this->db->query($sql);
    		$zaznam = $this->db->fetch_object($vysledek);
    		
    		if($zaznam->active == "1")
    		{	
    			if($this->db->num_rows($vysledek) == 1)
    			{
    				/**
    			 	* V případě kladného výsledku vrátí true
    			 	*/
    				
    				$this->SetSession("ID", $zaznam->id);
    				$this->SetSession("authority", $zaznam->authority);
    				return true;			
    			}
    			else
    			{	
    				return false;
    			}
    		}
    		else
    		{
    			return false;
    		}	
    	}
    	
    	/**
    	 * Odhlásí uživatele a zničí session
    	 */
    	public function LogoutUser()
    	{
    		$_SESSION = array();
    	 	session_destroy();
    	 	return true;
    	}
    	
    	/**
    	 * Nastaví session na potřebné parametry
    	 * @param $name
    	 * @param $value
    	 */
    	private function SetSession($name,$value)
    	{
    		$_SESSION['login'][$name] = $value;
    	}
    

    Řešení 1× (Smelik Martin (tazatel))
    Smelik Martin avatar 25.7.2011 11:49 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    Vyřešeno. Po přepsání všech podmínek a dopsani exit; ke všem přesměrováním a následnému promazání cookies a znovu přihlášení už se problém neobjevil.
    Smelik Martin avatar 24.7.2011 22:15 Smelik Martin | skóre: 5
    Rozbalit Rozbalit vše Re: chyba při předávání session
    akorát nechápu toto. Když vypnu a zapnu prohlížeč pokusím se zapsat něco a přesměruju se na neco.script.php tak session nastavené není. Tzn vrátím se zpět. Odhlásím se přihlásím se znovu a znovu se pokusím zapsat něco a přesměruje mě to na neco.script.php tak už session nastavené je správně a všechno je ok. Prostě jenom při prvním přihlášení a první akci. Vyzkoušel jsem to ted ve třech prohlížečích.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.