Autor | Zpráva | ||
---|---|---|---|
Mi24v Profil |
#1 · Zasláno: 15. 10. 2008, 09:31:25
Zdravím,
chci se jen zeptat na jeden problém. V jednom skriptě používám session. Na localhostu všechno jede, ale když skripty hodím na webhosting, session se neuloží. Zkoušel jsem ji zavolat ve skriptě, kde se ukládá a zobrazila se. Jakmile ji ale zavolám z jiného skriptu, tak se už nezobrazí. session_start() tam samozřejmě mám. Ještě připomínám, že na localu všechno jelo. Chci se teda zeptat, jestli je možné, že aby se session neukládala. Jestli by mohla být nějak vyplá. Napadá mě akorát, že bych jí ještě mohl nastavit životnost... Předem díky za rady a vaše zkušenosti... :-) |
||
nightfish Profil |
#2 · Zasláno: 15. 10. 2008, 09:39:08
jakým způsobem se identifikátor session přenáší? jestli přes cookies, tak zkontroluj, jestli jsou cookies povolené, jestli přes URL, tak zkontroluj, zda-li se do URL doplňuje identifikátor
jinak bez konkrétního kódu to asi podrobněji nepůjde |
||
Mi24v Profil |
#3 · Zasláno: 15. 10. 2008, 10:34:26
Tak jsem vyzkoušel na dvou webhostingách toto:
Soubor test.php: <?php session_start(); session_register("pocet"); session_register("kusu"); session_register("table"); $_SESSION['pocet'] = 1; $_SESSION['kusu'][0] = 22; $_SESSION['table'][0] = akce; header ("location: test1.php"); exit; ?> Soubor test1.php: <?php session_start(); echo $_SESSION['pocet']; echo $_SESSION['kusu'][0]; echo $_SESSION['table'][0]; ?> U toho kde mi to blbne to vypíše: 1 2 a U toho druhýho: 1 22 akce Tak teď poraďte kde je problém... Že by různý verze PHP?? |
||
Mi24v Profil |
#4 · Zasláno: 15. 10. 2008, 10:48:20 · Upravil/a: Mi24v
Myslel jsem, že pomůžou uvozovky, ale nic..
|
||
Andre Profil |
#5 · Zasláno: 15. 10. 2008, 15:58:45
Jen nevím proč máš u test.php na konci exit; a proč je u session další index [0]. Jinak nevím.
|
||
BetaCam Profil |
#6 · Zasláno: 15. 10. 2008, 16:59:03
Andre
„Jen nevím proč máš u test.php na konci exit;“ Protože za přesměrování by se měl vždy dávat exit; ( Pokud tedy není žádoucí dokončení scriptu za přesměrováním. ) Mi24v No minimálně ty session_register() tam nemaj co dělat. |
||
Andre Profil |
#7 · Zasláno: 15. 10. 2008, 17:31:19
„No minimálně ty session_register() tam nemaj co dělat.“
session_register() by neměl mít žádný vliv na tu chybu. |
||
el mariachi Profil |
#8 · Zasláno: 15. 10. 2008, 17:38:33
Andre
to súhlasím, ale sú tam úplne zbytočné... Mi24v <?php session_start(); echo $_SESSION['pocet']; echo $_SESSION['kusu'][0]; echo $_SESSION['table'][0]; ?> skús napísať ako <?php session_start(); echo $_SESSION['pocet']; echo $_SESSION['kusu']; echo $_SESSION['table']; ?> a ten prvý súbor skús takto : <?php session_start(); $_SESSION['pocet'] = 1; $_SESSION['kusu'] = 22; $_SESSION['table'] = "akce"; header ("location: test1.php"); ?> myslím že tu je teraz ten exit zbytočný, preto som ho dal preč, ale nemal by s tým mať žiadnu súvislosť. pokiaľ ho tam potrebuješ tak si ho tam kľudne pridaj, ale najskôr vyskúšaj toto |
||
nightfish Profil |
#9 · Zasláno: 15. 10. 2008, 17:47:50
„header ("location: test1.php"); “
schválně - bude tohle fungovat, když budou vypnuté cookies? imho ne... zkus header("Location: test1.php?".SID); |
||
BetaCam Profil |
#10 · Zasláno: 15. 10. 2008, 17:55:23
Andre
„session_register() by neměl mít žádný vliv na tu chybu.“ O to nejde de o to, že session_register() je deprecated. A session_register() by se nemělo používat pokud se používá $_SESSION. el mariachi „myslím že tu je teraz ten exit zbytočný, preto som ho dal preč, ale nemal by s tým mať žiadnu súvislosť. pokiaľ ho tam potrebuješ tak si ho tam kľudne pridaj, ale najskôr vyskúšaj toto“ Platí "nepsané" pravidlo, že za přesměrováním má být vždy exit(); a je jedno jestli je přesměrování na konci souboru nebo ne. |
||
Mi24v Profil |
#11 · Zasláno: 15. 10. 2008, 18:24:37
„Andre“
„to súhlasím, ale sú tam úplne zbytočné...“ „Mi24v“ „<?php“ „session_start();“ „echo $_SESSION['pocet'];“ „echo $_SESSION['kusu'][0];“ „echo $_SESSION['table'][0];“ „?>“ „skús napísať ako“ „<?php“ „session_start();“ „echo $_SESSION['pocet'];“ „echo $_SESSION['kusu'];“ „echo $_SESSION['table'];“ „?>“ „a ten prvý súbor skús takto :“ „<?php“ „session_start();“ „$_SESSION['pocet'] = 1;“ „$_SESSION['kusu'] = 22;“ „$_SESSION['table'] = "akce";“ „header ("location: test1.php");“ „?>“ „myslím že tu je teraz ten exit zbytočný, preto som ho dal preč, ale nemal by s tým mať žiadnu súvislosť. pokiaľ ho tam potrebuješ tak si ho tam kľudne pridaj, ale najskôr vyskúšaj toto“ Tak takle to jede, tudíš bude asi problém s ukládáním do pole. To potřebuji pro ukládání dalších položek. |
||
Mi24v Profil |
#12 · Zasláno: 15. 10. 2008, 18:30:58
Můžu vůbec udělat toto:
$_SESSION['nazev']['index_pole'] |
||
BetaCam Profil |
#13 · Zasláno: 15. 10. 2008, 18:34:57
Mi24v
„Můžu vůbec udělat toto: $_SESSION['nazev']['index_pole']“ můžeš. |
||
Mi24v Profil |
#14 · Zasláno: 15. 10. 2008, 20:17:53 · Upravil/a: Mi24v
Tak už jsem na to přišel!!!! Ono se to všechno ukládalo a všechno v pohodě jelo. Jenže, když se znovu načte index.php (stránky jsou includované) tak se všechny session smažou!!!
Tak teď poraďte... Toto je index: <div class="pre"><pre><?php session_start(); ?> <html> <head> <title>Semotex</title> <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"> <meta http-equiv="Content-Language" content="cs"> <?php if(eregi("MSIE", $_SERVER['HTTP_USER_AGENT'])) { echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"style_ie.css\">\n"; }else{ echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\">\n"; } ?> </head> <body> <a href="/SEMOTEX" class="logo"></a> <span class="main_line"></span> <span class="img_line"></span> <?php $top_tlacitka = 214; include "mysql_connect.php"; include "include_banner.php"; echo "<marquee direction=\"left\" behavior=\"scroll\" scrolldelay=\"85\" style=\" width: 60%; height: 20px; position: absolute; top: 70px; left: 50px; z-index: 1005;\">"; $vysledek = mysql_query("SELECT * FROM ostatni;"); while ($vypis = mysql_fetch_array($vysledek)) { echo "".$vypis['text']."\n"; } echo "</marquee>"; echo "<ul>\n"; $sql = "SELECT * FROM menu WHERE `typ` = 'user' ORDER BY poradi;"; if ($vysledek = mysql_query($sql)){ while ($vypis = mysql_fetch_array($vysledek)){ echo "<li class=\"menu\" style='top: ".$top_tlacitka."px;'><a href=\"index.php?page=".$vypis['odkaz']."\" class=\"menu\" target=\"".$vypis['funkce']."\">".$vypis['nazev']."</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; } }else{ echo "Databázový server neodpovídá."; } echo "</ul>\n"; $top_tlacitka = $top_tlacitka + 29; echo "<ul>\n"; if($_COOKIE['admin']){ include "mysql_connect.php"; $sql = "SELECT jmeno FROM uzivatele WHERE `login` = '".$_COOKIE['admin']."';"; if($vysledek = mysql_query($sql)){ if($vypis = mysql_fetch_array($vysledek)){ echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"index.php?page=profil.php\" class=\"menu_security\">Můj profil</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"index.php?page=kosik.php\" class=\"menu_security\">Nákupní košík</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"#\" onclick=\"window.open('administrace.php','Administrace','height=800, width=880, scrollbars=yes, location=no')\" class=\"menu_security\">Administrace</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"logout.php\" class=\"menu_security\">Odhlásit</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "</ul>"; echo "<span class=\"stav\">Přihlášen jako ".$vypis['jmeno']." | <img src=\"img/web/kosik.gif\" width=\"17\" height=\"17\" align=\"top\"> <a href=\"index.php?page=kosik.php\" style=\"color: #3a83ca;\">Nákupní košík</a> (";if (!isset($_SESSION['pocet'])){echo "0";}else{echo $_SESSION['pocet'];} echo ") | <a href=\"index.php?page=profil.php\" style=\"color: #3a83ca;\">Můj profil</a> | <a href=\"logout.php\" style=\"color: #3a83ca;\">Odhlásit</a></span>"; } } }elseif($_COOKIE['maloobchod']){ include "mysql_connect.php"; $sql = "SELECT jmeno FROM uzivatele WHERE `login` = '".$_COOKIE['maloobchod']."';"; if($vysledek = mysql_query($sql)){ if($vypis = mysql_fetch_array($vysledek)){ echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"index.php?page=profil.php\" class=\"menu_security\">Můj profil</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"index.php?page=kosik.php\" class=\"menu_security\">Nákupní košík</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"logout.php\" class=\"menu_security\">Odhlásit</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "</ul>"; echo "<span class=\"stav\">Přihlášen jako ".$vypis['jmeno']." | <img src=\"img/web/kosik.gif\" width=\"17\" height=\"17\" align=\"top\"> <a href=\"index.php?page=kosik.php\" style=\"color: #3a83ca;\">Nákupní košík</a> (".$_SESSION['pocet'].") | <a href=\"index.php?page=profil.php\" style=\"color: #3a83ca;\">Můj profil</a> | <a href=\"logout.php\" style=\"color: #3a83ca;\">Odhlásit</a></span>"; } } }elseif($_COOKIE['user']){ include "mysql_connect.php"; $sql = "SELECT jmeno FROM uzivatele WHERE `login` = '".$_COOKIE['user']."';"; if($vysledek = mysql_query($sql)){ if($vypis = mysql_fetch_array($vysledek)){ echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"index.php?page=profil.php\" class=\"menu_security\">Můj profil</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"index.php?page=kosik.php\" class=\"menu_security\">Nákupní košík</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"logout.php\" class=\"menu_security\">Odhlásit</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "</ul>"; echo "<span class=\"stav\">Přihlášen jako ".$vypis['jmeno']." | <img src=\"img/web/kosik.gif\" width=\"17\" height=\"17\" align=\"top\"> <a href=\"index.php?page=kosik.php\" style=\"color: #3a83ca;\">Nákupní košík</a> (".$_SESSION['pocet'].") | <a href=\"index.php?page=profil.php\" style=\"color: #3a83ca;\">Můj profil</a> | <a href=\"logout.php\" style=\"color: #3a83ca;\">Odhlásit</a></span>"; } } }else{ echo "<li class=\"menu_security\" style='top: ".$top_tlacitka."px;'><a href=\"index.php?page=login.php\" class=\"menu_security\">Přihlášení</a></li>\n"; $top_tlacitka = $top_tlacitka + 29; echo "</ul>"; echo "<span class=\"stav\"><a href=\"index.php?page=login.php\" style=\"color: #3a83ca\">Přihlásit se</a></span>"; } echo "</ul>\n"; echo "<span class=\"content\">"; $page=$_GET["page"]; if($page) { if(file_exists($page)) { include "$page"; }else{ include "404.php"; } }else{ include "pages/uvod.php"; } echo "</span>"; echo "<div style='position: absolute; left: 0px; top: ".$t |
||
Mi24v Profil |
#15 · Zasláno: 15. 10. 2008, 20:30:53
Vyřešeno!!! Dělalo to session_start() které bylo napsané ve skriptu úplně nahoře, smazal jsem to a jede to...
|
||
Časová prodleva: 10 dní
|
|||
HonzaMac Profil * |
#16 · Zasláno: 25. 10. 2008, 12:59:15
Tak, sice jsem si to nečetl celé, ale nyní jsem to řešil v práci.
Podobný script na serveru, kde jde Linux fungoval skvěle, ale na Windowsovem serveru nefungoval. Příklad: <?php // index.php session_start() $_SESSION["neco"]="nic"; print_r($_SESSION["neco"]); // vypíše header("Location: index2.php"); ?> <?php // index2.php session_start(); print_r($_SESSION["neco"]); // nevypiše nic? Proč? // protože běžím ne windows serveru! ?> Ano, přesně tohle se mi stalo. Řešením bylo, že jsem před přesměrováním napsat ještě session_close_write(); V linuxu se to udělá automaticky, ale ve windows ne. Snad tento příspěvek někomu pomůže. Mě to trvalo několik hodin, než jsem přišel na to, proč to na Linuxu funguje a na Windows ne. |
||
Časová prodleva: 3 dny
|
|||
jrm Profil |
#17 · Zasláno: 28. 10. 2008, 09:16:11
Jen poznámka - prohozená slova u poslední funkce:
session_write_close() ---> Write session data and end session |
||
Časová prodleva: 7 dní
|
|||
pietroverde Profil |
#18 · Zasláno: 4. 11. 2008, 09:15:21 · Upravil/a: pietroverde
Řekněme, že mám stejný problém jako Mi24v, jen s tím rozdílem, že nepřesměrovávám, ale parametry přenáším v QUERY_STRING v URL, podle kterých se pak spouští příslušná funkce. Na lokálu mi všechno jede, ale jakmile to dám na webhosting, tak se $_SESSION nepřesnese.
Mám redakční systém, do kterýho (resp. na kterej) jsem implementoval správce souborů. v administraci redakčního systému si vytvořím obrázkovou galerii, kterou chci naplnit obrázkama vybranýma ze správce souborů. Mimo jiné potřebuju uchovat ID galerie, do který se mají zvolené obrázky uložit. soubor admin.php v redakčním systému: <html> ... <a href="cesta/někam/filemanager.php?pridg=1">Otevřít správce souborů</a> <!-- pridg = číslo galerie, do které se mají obrázky přidat --> ... </html> soubor filemanager.php ve správci souborů: <?php function OdstranitXSS($vstup){ // funkce zajištující ošetření vstupních proměnných... return $vstup; } if(function_exists('session_start')) session_start(); Header('Cache-control: private, no-cache, must-revalidate'); Header('Expires: 0'); //$pridg = $_GET["pridg"]; $_SESSION["pridat_do_galerie"] = OdstranitXSS($_GET["pridg"]); if(isset($_SESSION["pridat_do_galerie"]) && $_SESSION["pridat_do_galerie"]!=""): $cesta_zpet = "../../admin.php?akce=OtevritGalerii&modul=galerieobr&pridg="; $cesta_zpet .= "$_SESSION["pridat_do_galerie"].""; else: $cesta_zpet = "../../admin.php?akce=PrehledSouboru&modul=filemanager"; endif; ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=<?php echo CHARSET; ?>"> <title><?php echo TITLE; ?></title> <link rel="stylesheet" type="text/css" href="<?php echo STYLESHEET; ?>"> </head> <body> <!-- vyzkouším, jestli se přenáší potřebné parametry --> <p><?php echo "SESSION: ".$_SESSION["pridat_do_galerie"]; ?></p> <p><?php echo "REFERER: ".$_SERVER["HTTP_REFERER"]; ?></p> <!-- /vyzkouším, jestli se přenáší potřebné parametry --> ... <?php include('filemanager.inc.php'); ?> ... </body> </html> Při přechodu z administrace do správce souborů na "filemanager.php?pridg=1" se mi $_SESSION["pridat_do_galerie"] zobrazí správně, tj. jednička. Při kontrole cookies vidím, že v počítači je uloženo jenom PHPSESSID. Neměla by tam být i hodnota "pridat_do_galerie"? Jakmile ale přejdu do nějakého adresáře ve správci souborů, např. "filemanager.php?fmMode=open&fmObject=0", tak se mi už $_SESSION["pridat_do_galerie"] nepřenese. Jak jsem řekl, na lokálu (Windows, Apache jako Fast-CGI) mi vše funguje OK. Webhosting jede na Linuxu. Zkoušel jsem různý varianty jako zakomentovat session_start() nebo hlavičky Header, kdyby to náhodou bylo tím, že se nemá používat cache. Zkusil jsem přidat session_write_close() na poslední řádek před vypsáním HTML. Všechno bez efektu, nebo prohlížeč souborů nefungoval správně a session se stejně nepřenášely. P.S: ještě poznámka. Při použití MSIE se $_SERVER["HTTP_REFERER"] přenese jenom při přechodu z admin.php na filemanager.php, ale dál se už při pohybu ve správci souborů, tj. filemanager.php zůstává a mění se jen parametry URL za otazníkem, se už HTTP_REFERER nepřenese. Ve Firefoxu se referer přenáší všude. |
||
pietroverde Profil |
#19 · Zasláno: 4. 11. 2008, 13:13:47 · Upravil/a: pietroverde
No, tak chybička se našla, v souboru filemanager.php mělo místo:
$_SESSION["pridat_do_galerie"] = OdstranitXSS($_GET["pridg"]); být správně: if(!isset($_SESSION["pridat_do_galerie"]) && $_SESSION["pridat_do_galerie"]!=""): $_SESSION["pridat_do_galerie"] = OdstranitXSS($_GET["pridg"]); endif; Pokaždé se dosazovala hodnota z parametru pridg z URL, ale ten tam byl jenom při přechodu z administrace do správce souborů, dál už ne, takže se tam dosadila prázdná hodnota. |
||
Časová prodleva: 15 let
|
0