Autor | Zpráva | ||
---|---|---|---|
j_hajsl Profil |
#1 · Zasláno: 17. 12. 2006, 13:17:09
Ahoj všem,
mám jeden problém nainstaloval jsem si Apache 2.2, PHP 5.2.0 a MySQL 4.1.x a všechno jsem zprovoznil, až na jedno ... sessions, myslim si že všechno je ok, cestu mám v pořádku (úmyslně špatně nastavená cesta ohlasila chybu), všechno jsem kontroloval, všechny direktivy jsou stejně jako jsem měl v minulé konfiguraci, tedy apache 1.3.x, php 4.3.10 a mysql 4.0.x ... v php.ini jsem nastavil i kompabiltu s php 4.x (je druha hned po engine=On ...) tak už nevím, co s tím ... je nějaký rozdíl v sessions mezi php 4 a 5 ... nějaký specifický požadavky ... ? |
||
Pavel Strejček Profil |
#2 · Zasláno: 19. 12. 2006, 00:31:16
Na tento popis problému těžko něco poradit. Podle čeho zjišťuješ, že sessions nefungují?
|
||
Thalia Profil |
#3 · Zasláno: 19. 12. 2006, 00:40:38 · Upravil/a: Thalia
2Pavel: některé podrobnosti Jirkova problému jsou už napsány v http://www.webzdarma.cz/forum/read.php?f=2&i=36400&t=36400.
|
||
Pavel Strejček Profil |
#4 · Zasláno: 19. 12. 2006, 00:56:34
dokonce to tam i vyřešil
|
||
Časová prodleva: 3 dny
|
|||
j_hajsl Profil |
#5 · Zasláno: 22. 12. 2006, 08:58:06
Pavel Strejček
bohužel nevyřešil ... zjistil jsem že skript normalne funguje v php4 nefunguje v php5, ačkoli jsou sessions v php.ini nastaveny správně, chyba bude v tom skriptu, něco co php4 tolerovalo a php5 už netoleruje, může být problém v tom, že aby se session zapsala, tak musí při každym načtení jít něco do výstupu, někde jsem to četl, ale jelikož jsem to v tom skriptu nedodržoval a po zapisu jsem použil Header("Location: ..."); a fungovalo to ve win i v linuxu tak jsem to tak nechal ... |
||
Pavel Strejček Profil |
#6 · Zasláno: 22. 12. 2006, 11:20:27
Aha, já jsem to pochopil, že už session fungují.
aby se session zapsala, tak musí při každym načtení jít něco do výstupu To se mi nezdá, že by tam nechali takový bug. Ve verzi 5.1.4. to funguje krásně i bez výstupu po odeslání hlaviček. Kde jsi to četl? |
||
j_hajsl Profil |
#7 · Zasláno: 22. 12. 2006, 14:09:59
Pavel Strejček
Kde jsi to četl? to už nevím, někde jsem to četl ... on je to docela zásadní problém, protože to příhlašuje do celý aplikace ... a spolehat se na cookie nechci ... |
||
Pavel Strejček Profil |
#8 · Zasláno: 22. 12. 2006, 14:22:30
Dej tyhle dva soubory do jednoho adresáře a zavolej test.php a pošli sem výsledek.
soubor test.php <? session_start(); $_SESSION['test_session'] = 'Hello world!'; header('HTTP/1.1 302 Found'); header('Location: test1.php'); header('Connection: close'); exit(); ?> soubor test1.php <? session_start(); print_r($_SESSION); ?> Jinak nevím proč nechceš spoléhat na cookie. Je to lepší než když se bude přenášet ta session $_GETem. Raději používám pro $_SESSION ukládaní do cookies, dá potom větší práci ukrást sešnu. |
||
Časová prodleva: 2 měsíce
|
|||
j_hajsl Profil |
#9 · Zasláno: 10. 2. 2007, 09:32:43 · Upravil/a: j_hajsl
Pavel Strejček
zdravim po delší době, tak jsem vyzkoušel jak si mi radil a vysledek je, že mi to vrací prázdný pole, ale ještě zajímavější je, že ted to funguje nějak napůl, totiž session se vytvoří tam kde má, ale s načtením nové stránky (vyzkoušeno na více skriptech) se zároveň vytvoří nová prázdná session, proto prázdný výsledek <? session_start(); $_SESSION['test_session'] = 'Hello world!'; echo "<a href="test1.php">TEST</a>"; ?> pracuje jak má, ale když použíji tlačítko zpět, vytvoří se test.php novou session dokonce nepomáha ani nahrazení Header echo "<meta http-equiv="refresh" content="0;URL=http://jirka/test1.php">"; takže absolutně netuším co je špatně :-/ // edit !! tak to funguje, chyba byla v tom, že stejně jako direktiva session.save_path byla nastavena i session.cookie_path // edit2 !! tak radost byla předčasná, v ostatních skriptech to funguje, ale v tom nejdůležitějším nikoli, session se ani nevytvoří ... |
||
j_hajsl Profil |
#10 · Zasláno: 10. 2. 2007, 12:02:17 · Upravil/a: j_hajsl
tady je část kodu
index.php -- require_once ("./spoj_funkce.php"); soubor spoj_funkce.php session_start(); // spustí sessions a nakonec důležité funkce ze soubor fce.php function obnov($kam,$kam2="") { nutno dodat, že spojení s db funkce, funkce obnov presměruje, tam kam má, nutno dodat, že soubor "uvod.php" je frameset a načítá si soubor hlavní stránky, menu, horní a dolního stavového řádku ... |
||
Pavel Prochazka.zde.cz Profil * |
#11 · Zasláno: 10. 2. 2007, 12:16:57
mozna je to trosku mimo misu ale:
take se me stavalo v php4 ze nejde nastavit session pri ukonceni prohlizece, nebo pri kliknuti na sipku zpet .... tak jsem zacal pouzivat toto: unset ( $_SESSION["id_prezdivka"], $_SESSION["id"], $_SESSION["JeAdmin"]); $_SESSION["id_prezdivka"]=$prezdivka; $_SESSION["id"]=$id; $_SESSION["JeAdmin"]=$jeadmin; nejprve patricne session znicim a potom je znovu vytvorim..... |
||
Pavel Strejček Profil |
#12 · Zasláno: 10. 2. 2007, 13:39:58
j_hajsl
Zajímavé. Takže když se umístí print_r($_SESSION); za session_start(); v souboru spoj_funkce.php, tak tam nic není? |
||
Pavel Strejček Profil |
#13 · Zasláno: 10. 2. 2007, 13:43:13
ještě exit, aby se to nepřesměrovalo: print_r($_SESSION);exit;
|
||
j_hajsl Profil |
#14 · Zasláno: 10. 2. 2007, 14:04:00 · Upravil/a: j_hajsl
Pavel Strejček
ano přesně, vypíše se jen Array ( ), je to prázdné, ale když jsem funkci obnov() upravil ... function obnov($kam,$kam2="") { tak to session zapise do txt souboru spravne, nepomuze ani rada od kolegy Procházky (zkoušel jsem s i bez jeho kodu) a navíc jsem zjistil další zajímavou věc: kdyz jsem v index.php vynechal kod pro odhlášení (kam se přesměrovuje když neexstiuje $_SESSION['id'], tj. session_destroy(); tak v umístění pro session zůstane prazdná session soubor se v tempu vytvoří ale zůstane prostě prázdna ... někde dojde ke nikoli ke "zničení" ale k "unset" všech session .... zdůraznuji, že k tomu dojde bez toho <kodu_navic> ! |
||
Pavel Strejček Profil |
#15 · Zasláno: 10. 2. 2007, 14:26:55 · Upravil/a: Pavel Strejček
Chtělo by to zjistit minimální příklad kódu, kdy to přestane fungovat, aby se vyloučila chyba v logice skriptu. Ten kód se nedá vzít a vyzkoušet. Postupně odmazat, to co tam být nemusí až to začne fungovat. Jestli to jinde funguje, jak jsem pochopil, tak to není způsobeno verzí PHP, ale bude to v tom skriptu.
|
||
j_hajsl Profil |
#16 · Zasláno: 10. 2. 2007, 14:37:57 · Upravil/a: j_hajsl
Pavel Strejček
v php4 to funguje jak má bez jakékoli změny v kodu, prostě jsem jen odintaloval apache 1.23.x php4.3.9 a mysql 4.0.x a nainstaloval apache 2.2.3, php 5.2.0 a mysql 4.1.x a to je vše, jinak jsem opravdu nic nemenil zkoušem funkci změnit i za cenu, že se na výstupu něco vypíše, ale nepomáhá to
ale ani to nepomůžu, ani v mezičase se session nezapiše, je tam nulový soubor, ale do obou textových souborů se to zapíše jak má, tak opravdu netuším :-( |
||
Pavel Prochazka.zde.cz Profil * |
#17 · Zasláno: 10. 2. 2007, 14:46:44
mozna me tu neco porad unika.....
Vypisete vsechny session, ok, ty se zapisi do souboru..... ale pak dale nevidim kde ji pouzivate..... sem si v php4 odkrokoval nasledujici funkci a vse je ok.... function obnov($kam) { //global $_SESSION; //$fp = fopen("./vypis_promennych.txt","a"); foreach ($_SESSION as $key => $value) { $prechodka[$key]=$value; $text .= "$key > $value ;"; } //$zapis = fwrite($fp,$text); //fclose($fp); } Php5 nemam jelikoz na mem free hostingu je pouze php4..... |
||
Pavel Prochazka.zde.cz Profil * |
#18 · Zasláno: 10. 2. 2007, 14:53:14
jeste jedna poznamka:
kdy pouzijete v kodu: unset($_SESSION);unset($text); a potom pracujete opet se $_SESSION, tak by ta promena uz nemala bejt k dispozici. Ale jak rikate ze se zapisi data do obou souboru.... dle me se ty session smazou casem nebo nejpozdeji besprostredne po ukonceni scriptu.... Pokud uzivatel klikne na dalsi stranku, tak uz $_SESSION neni zadna k dispozici... |
||
Pavel Strejček Profil |
#19 · Zasláno: 10. 2. 2007, 14:54:23
Porovnal bych po té instalaci ještě nastavení php.ini, hlavně sekci SESSION. Používáš tam taky extract, tak jak bylo zapnuto register_globals, jestli to nemělo vliv.
Jinak chybu tam nevidím, ale vyzkoušet to nejde, protože nevím co má je na vstupu všech polí, není to komplet. Základní skriptík se session funguje, takže sešnama to asi IMHO není. |
||
j_hajsl Profil |
#20 · Zasláno: 10. 2. 2007, 14:54:23
Pavel Prochazka.zde.cz
funkce obnov() přesmerovuje na soubor uvod ... ale jelikož uživatele se dají smazat, tak ten kdo se jednou prihlásí, ví kam má jit, tak i v na uvodu souboru "uvod" testuji zda je session zaplnene uzivatelou id, kterou ziskam v tom indexu ($_SESSION['sess_id'] = $prihlaska['us_id'];), ale ona tam neni, tak ten skript provede odhlaseni a normalne session znici session_destroy ale protoze jsem to chtel ladit, tak jsem tu cast kodu vynechal a zjistil, ze se mi v tempu session vytvori ale prázdná ... |
||
j_hajsl Profil |
#21 · Zasláno: 10. 2. 2007, 15:01:59 · Upravil/a: j_hajsl
Pavel Strejček
register_long_arrays = On to byl celý problém !!!! já to měl off .... díky za nakopnutí ... kontroloval jsem jen nastavení v sekci session ... a ne u register_... // edit ted čtu manual a je to nová directiva od PHP 5.0.0 |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0