Poradí mi prosím někdo ? Nevím proč mi nejede Session na webzdarma.
Co dělám špatně nebo co mi tam chybí, aby ve 2. skriptu byla vidět proměnná z 1. skriptu ?
Tady jsou vzory dvou zkušebních skriptů.
1. skript
<?php
session_start();
$_SESSION["name"]="abcd";
print '$_SESSION["name"]='.$_SESSION["name"];
print '<br>';
print '<a href="test2.php">dalsi strana</a><br>';
?>
2.skript
<?php
print '$_SESSION["name"]='.$_SESSION["name"];
print '<br>';
?>
1. skript vytiskne:
$_SESSION["name"]=abcd
dalsi strana
Ale 2. skript po volbě dalsi strana vytiskne jen:
$_SESSION["name"]=
a v adresovém řádku je adresa :
http://xxxxxx.prodejce.cz/test2.php?PHPSESSID=9251c81c9bef746c3bd92d89e3002f2e
"xxxxxx" je jen fiktivní adresa
<HTML>Ve 2. skriptu také musí být <code>session_start();</code></HTML>
Díky za odpověď. Jestli to správně chápu, tak musím potom každý skript, ve kterém chci vidět hodnoty v Session, na začátku mít session_start() ?
Na localhostu mi to nejelo, ale upravil jsem to v php.ini pomocí nastavení autostartů session a asi to bude tedy to jádro pudla.
Ještě bych si dovolil přidat otázku. Co se stane, když někde ve skriptu bude omylem za sebou dvakrát session_start() ?
Přebere se to tam nějak samo nebo je to už chyba ? Jedná se mi o případy, kde se vkládá jeden skript do druhého a omylem bych tam napsal také to session_start() vlastně navíc.
Skript ohlásí chybu, že funkce již byla volána.
Stačí ji však potlačit zápisem @session_start();
Dík, tak to ošetřím pro jistotu zavináčem. Chyba tedy vlastně nevznikne, jen hlášení o ni a to bude potlačeno.
honza: "Chyba tedy vlastně nevznikne, jen hlášení o ni a to bude potlačeno."
Meleš kraviny! Chyba vznikne, dokonce vznikne i to chybové hlášení. Jenom nebude posláno na výstup. Zavináč nepoužívat - je to zlo...
Tady by slo pouziti zavinace mozna nahradit
if(!isset($_SESSION)) session_start();
___
Je to ale jenom má domnenka, nejsem si jisty, jeslit $_SESSION neni nahodou nastaveno (a pouze prazdne), i pokud session neni aktivni...
No tak aby nebyly pochybnosti, tak jsem to tedy vyzkoušel.
Jak je vidět, vícenásobné volání session_start() mu nevadí, takže ošetřování není potřeba.
Nevím, kde jsem vzal, že to ohlásí chybu. Možná to bylo kdysi dávno, kdy jsem prováděl všemožné includování a sesssionování. Možná přelud.
Ale správně by se měl session_start volat pouze jednou. Takže vícenásobnému voláni se raději vyhnout. To znamená, vědět odkud kam všechno se volá session.
Freezovo ošetření funguje. S session_start vrací isset($_SESSION) hodnotu 1 (true). Bez startu nic (false).