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 23:33 | Nová verze

Byla vydána nová stabilní verze 1.15 (1.15.1147.36) webového prohlížeče Vivaldi (Wikipedie). Z novinek lze zdůraznit možnost nastavení vlastního pozadí okna, přístup k záložkám z hlavního menu, lepší ovládatelnost v režimu celé obrazovky nebo vyřešení problémů se zvukem v HTML5. Nejnovější Vivaldi je postaveno na Chromiu 65.0.3325.183.

Ladislav Hagara | Komentářů: 0
včera 17:22 | Nová verze

Node.js Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 10.0.0 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). Verze 10 se v říjnu stane novou aktivní LTS verzí. Podpora je plánována do dubna 2021.

Ladislav Hagara | Komentářů: 0
včera 15:33 | Nová verze

Neal Cardwell ze společnosti Google oznámil zveřejnění verze 2.0 nástroje pro testování síťového stacku packetdrill. Jde o souhrnné vydání změn z interního vývoje od roku 2013.

Michal Kubeček | Komentářů: 0
včera 13:22 | Zajímavý software

Microsoft na svém blogu oznámil, že správce knihoven pro C++ Vcpkg (VC++ Packaging Tool) lze nově používat také na Linuxu a macOS. Aktuálně je pro Linux k dispozici více než 350 knihoven [reddit].

Ladislav Hagara | Komentářů: 1
včera 12:44 | Komunita

Byly zveřejněny exploity na Nintendo Switch a platformu Tegra X1: Fusée Gelée a ShofEL2. Jejich zneužití nelze zabránit softwarovou aktualizací. Na druhou stranu exploity umožní na Nintendo Switch snadno a rychle nainstalovat Linux, viz. ukázka na YouTube. Jenom je potřeba sáhnout na hardware.

Ladislav Hagara | Komentářů: 0
včera 00:55 | Nová verze

Byla vydána verze 2.12.0 QEMU (Wikipedie). Přispělo 204 vývojářů. Provedeno bylo více než 2 700 commitů. Přehled úprav a nových vlastností v seznamu změn. Řešeny jsou také bezpečnostní chyby Meltdown a Spectre.

Ladislav Hagara | Komentářů: 7
včera 00:33 | Komunita

Google zveřejnil seznam 1 264 studentů přijatých do letošního Google Summer of Code. Přehled projektů, studentů, 212 organizací a mentorů je k dispozici na stránkách GSoC.

Ladislav Hagara | Komentářů: 0
24.4. 23:55 | Nová verze

Oracle vydal verzi 1.0 univerzálního virtuálního stroje GraalVM, který umožňuje běh programů napsaných v jazycích založených na JVM, JavaScript, LLVM bitcode a experimentálně Ruby, R a Python.

razor | Komentářů: 1
24.4. 01:22 | Zajímavý článek

Julia Evans pomocí svých kreslených obrázků proniká do Linuxu a informačních technologií. Vedle ucelených zinů publikuje také jednotlivé kreslené obrázky (RSS).

Ladislav Hagara | Komentářů: 5
23.4. 13:22 | Zajímavý software

Jordi Sanfeliu vydal verzi 1.0.0 svého unixového jádra Fiwix (Wikipedie) určeného také pro výuku operačních systémů. Dle článku na OSNews na něm začal pracovat již před více než dvaceti lety. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT. Stáhnout a vyzkoušet lze živou disketu nebo CD s GNU/Fiwixem.

Ladislav Hagara | Komentářů: 5
Používáte na serverech port knocking?
 (3%)
 (7%)
 (46%)
 (27%)
 (18%)
Celkem 380 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    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: 629×
    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.