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:45 | Zajímavý software

Na blogu Qt bylo představeno Qt 3D Studio. Jedná se o produkt dosud známý pod názvem NVIDIA DRIVE™ Design Studio. NVIDIA jej věnovala Qt. Jedná se o několik set tisíc řádků zdrojového kódu. Qt 3D Studio bude stejně jako Qt k dispozici jak pod open source, tak pod komerční licencí. Ukázka práce s Qt 3D Studiem na YouTube.

Ladislav Hagara | Komentářů: 0
včera 17:50 | Komunita

Nadace The Document Foundation (TDF) zastřešující vývoj svobodného kancelářského balíku LibreOffice slaví 5 let od svého oficiálního vzniku. Nadace byla představena 28. září 2010. Formálně byla založena ale až 17. února 2012.

Ladislav Hagara | Komentářů: 0
včera 12:50 | Komunita

Mozilla.cz informuje, že dosud experimentální funkce Page Shot z programu Firefox Test Pilot (zprávička) se stane součástí Firefoxu. Page Shot je nástroj pro vytváření snímků webových stránek. Umí výběr oblasti, prvku stránky (např. odstavce), nebo uložení snímku celé stránky. Snímky lze ukládat na disk nebo nahrávat na server Mozilly. Nedávno bylo oznámeno, že se součástí Firefoxu stane Activity Stream.

Ladislav Hagara | Komentářů: 10
včera 04:10 | Nová verze

Po 10 týdnech vývoje od vydání Linuxu 4.9 (zprávička) oznámil Linus Torvalds, mj. již 20 let žijící v USA, vydání Linuxu 4.10 (LKML). Přehled nových vlastností a vylepšení například na Kernel Newbies a v Jaderných novinách (1, 2 a 3). Kódové jméno Linuxu 4.10 je Fearless Coyote.

Ladislav Hagara | Komentářů: 6
19.2. 15:55 | Zajímavý projekt

Vyzkoušet si příkazy a vyřešit několik úkolů lze na stránkách Commandline Challenge (CMD Challenge). Úkoly lze řešit různými způsoby, důležitý je výsledek. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

Ladislav Hagara | Komentářů: 18
18.2. 17:35 | Bezpečnostní upozornění

Německá Bundesnetzagentur (obdoba českého ČTU) zakázala na německém území prodej panenky Cayla kvůli „špionáži“ dětí. Tato elektronická hračka obsahuje mikrofon, reproduktor a kameru a bezdrátové komunikační rozhraní, pomocí kterého se hračka připojuje na servery výrobce. Takovýmto způsobem může hračka pomocí umělé inteligence „odpovídat“ na dotazy dítěte. Hlavní problém bude ale asi někde jinde, podle prvotních zpráv může

… více »
Petr Tomášek | Komentářů: 31
17.2. 15:30 | Bezpečnostní upozornění

CSIRT.CZ upozorňuje, že bezpečnostní experti objevili nový typ malwaru, jenž cílí na open source e-commerce platformu Magento. Malware je zajímavý tím, že se jedná o první svého druhu, jehož kód zůstává skrytý v SQL databázi zasaženého e-shopu. Škodlivý kód je volán pomocí tzv. SQL trigerru, který je spouštěn při každém vytvoření objednávky v systému.

Ladislav Hagara | Komentářů: 3
17.2. 09:00 | Nová verze

Bylo vydáno Ubuntu 16.04.2 LTS, tj. druhé opravné vydání Ubuntu 16.04 LTS s kódovým názvem Xenial Xerus. Přehled novinek v poznámkách k vydání a v přehledu změn.

Ladislav Hagara | Komentářů: 57
17.2. 06:00 | Zajímavý článek

Pavel Tišnovský se v dvoudílném článku na MojeFedora.cz věnuje tvorbě pluginů (modulů) pro bitmapový grafický editor GIMP. Pomocí pluginů lze GIMP rozšiřovat o další funkce. Implementovat lze například nové filtry nebo pomocné utility pro tvorbu animací či poloautomatickou retuš snímků.

Ladislav Hagara | Komentářů: 6
16.2. 23:32 | Komunita

Do 30. března se lze přihlásit do dalšího kola programu Outreachy, jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 30. května do 30. srpna 2017, v participujících organizacích lze vydělat 5 500 USD. Jedná se již o 14. kolo tohoto programu.

Ladislav Hagara | Komentářů: 11
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (13%)
 (2%)
 (71%)
 (3%)
 (10%)
Celkem 670 hlasů
 Komentářů: 54, poslední dnes 07:38
Rozcestník
Reklama

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: 627×
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.