abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 15:00 | Zajímavý článek

    Byl publikován přehled vývoje renderovacího jádra webového prohlížeče Servo (Wikipedie) za uplynulé dva měsíce. Servo zvládne už i Gmail. Zakázány jsou příspěvky generované pomocí AI.

    Ladislav Hagara | Komentářů: 5
    9.5. 17:22 | Nová verze

    Raspberry Pi Connect, tj. oficiální služba Raspberry Pi pro vzdálený přístup k jednodeskovým počítačům Raspberry Pi z webového prohlížeče, byla vydána v nové verzi 2.5. Nejedná se už o beta verzi.

    Ladislav Hagara | Komentářů: 3
    9.5. 15:22 | Komunita

    Google zveřejnil seznam 1272 projektů (vývojářů) od 185 organizací přijatých do letošního, již jednadvacátého, Google Summer of Code. Plánovaným vylepšením v grafických a multimediálních aplikacích se věnuje článek na Libre Arts.

    Ladislav Hagara | Komentářů: 0
    8.5. 19:22 | Nová verze

    Byla vydána (𝕏) dubnová aktualizace aneb nová verze 1.100 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.100 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    8.5. 18:00 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.5.

    Ladislav Hagara | Komentářů: 0
    8.5. 01:22 | Nová verze Ladislav Hagara | Komentářů: 0
    8.5. 00:55 | Zajímavý projekt

    PyXL je koncept procesora, ktorý dokáže priamo spúštat Python kód bez nutnosti prekladu ci Micropythonu. Podľa testov autora je pri 100 MHz približne 30x rýchlejší pri riadeni GPIO nez Micropython na Pyboard taktovanej na 168 MHz.

    vlk | Komentářů: 0
    7.5. 19:44 | Nová verze

    Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 12.0. Přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    7.5. 17:33 | Nová verze

    Raspberry Pi OS, oficiální operační systém pro Raspberry Pi, byl vydán v nové verzi 2025-05-06. Přehled novinek v příspěvku na blogu Raspberry Pi a poznámkách k vydání. Pravděpodobně se jedná o poslední verzi postavenou na Debianu 12 Bookworm. Následující verze by již měla být postavena na Debianu 13 Trixie.

    Ladislav Hagara | Komentářů: 0
    7.5. 05:33 | Komunita

    Richard Stallman dnes v Liberci přednáší o svobodném softwaru a svobodě v digitální společnosti. Od 16:30 v aule budovy G na Technické univerzitě v Liberci. V anglickém jazyce s automaticky generovanými českými titulky. Vstup je zdarma i pro širokou veřejnost.

    Ladislav Hagara | Komentářů: 17
    Jaký filesystém primárně používáte?
     (57%)
     (1%)
     (8%)
     (22%)
     (4%)
     (2%)
     (3%)
     (1%)
     (1%)
     (3%)
    Celkem 580 hlasů
     Komentářů: 26, poslední 8.5. 09:58
    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: 689×
    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.