mam mozna jednoduchy dotaz:
jak snadneji posilat hodne promennych mezi strankama? pri prechodu na jinou potrebuji, aby zustaly vsechny promenne zachovany a tenhle styl "neco.php?v1=as&v2=dsdds&...&v45=sdfsf" moc vhodny neni...
da se nejak predavat POLE? nebo mam pouzivat cookies?
poradte
Pouziti sessions je mnohem snazsi i bezpecnejsi. Veskere promenne jsou ulozeny na serveru, staci prenaset jen session ID.
aha, uz na to mrkam v manualu, todle bude asi lepsi... nemate odkaz na nejaky "tutorialek" a s nazornymi prikladky?... ;).
jinak moc dik
Je to velice jednoduche:
session_start(); //nastartuje sessions
$_SESSION['promenna'] = $promenna; // muzes si ulozit lib. pocet promennych, udaju, atp.
Pokud budes chtit obsah vyvolat v jinem souboru, opet:
session_start();
$promenna = $_SESSION['promenna'];
session_start() musi vyt pouzito pred vystupem, jelikoz posila cookie v http zahlavi
Pokud by nesly ty sessions (neby byl nejaky jiny duvod proc je nepouzit), tak i pole se v URL samozrejme prenaset da, ale musi byt ve specialnim formatu. To se zajisti funkci serialize(), ktera z toho pole udela byte-stream (bitovou reprezentaci toho pole), ktery se da prenest pres GET nebo POST, atd. Na te druhe strance to prectes napr. ze $_GET[] a zavolas na to unserialize() a ono ti to z toho byte-streamu udela zase to pole.
toz diky, to se taky celkem hodi... ;)
a tedkom este doplnujici otazecka:
na netu sessions funguji, jak to ale zprovoznit na localhost?... haze mi to neco jako:
>>>
Warning: session_start(): open(/tmp\sess_96c08fac8606c8cf3894eafb1fc69f4b, O_RDWR) failed: No such file or directory (2) in e:\web\php\test.php on line 2
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at e:\web\php\test.php:2) in e:\web\php\test.php on line 2
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at e:\web\php\test.php:2) in e:\web\php\test.php on line 2
count not set!
<<<, kde "count" je testovana promenna...
v php.ini sem se nejdrive pokousel neco nastavit s tmp cestou, ale asi to moc nepomohlo... az sem si vytvoril na "c:" adresar "tmp", tak to tam zaclo vytvaret 0B soubory "sess_xxx..." a na strance jenom vypis vyse zminenych hlasek...
Se session jsem ještě nedělal, ale zkusím střílet od pasu:
open(/tmp\sess... buď je špatně "/" nebo "\". Předpokládám, že to druhé.
Cannot send session cookie - headers already sent ... funkce session_start() musí být volána ještě před odesláním prvního znaku prohlížeči, tedy na začátku skriptu.
Ta třetí chyba bude mít stejnou příčinu.
Vidím, že volání funkce session_start() máš na druhém řádku. Co máš na prvním?
jezz: v php.ini musis napred nastavit adresar na ukladani sessions, je to konkretne direktiva session.save_path. Jeji hodnota je obyvkle neco jako C:\Windows\Temp, ale muze to byt lib. adresar., dale pred prikazem session_start() nesmi predchazet jakykoliv vystup (zadne HTML, ani echo(), ale ani prazdy radek)
no jenom pro testovani sem udelal tohle:
<?
session_start();
$count = $_SESSION['count'];
if (!(isset($count))) {
echo "count not set!<br>";
} else {
echo $count;
}
$_SESSION['count'] = "xxx";
echo "<a href=".$PHP_SELF.">link-ses</a>";
?>
na wz.cz to funguje presne podle dane logicke struktury (jezz.wz.cz/test.php)... ale diky dial-up connection :/ to nejdrive pisu a zkousim via apache(1.3.28) a mam tu php(4.3.3) a win2000.
pravdepodobne bude chyb v nastaveni v php.ini...
jinak obcas to vyhodi i tyto chyby (pri spatne nastavenem temp path: "C:/tmp"):
>>>
Warning: Unknown(): open(/tmp\b\sess_b6a64f083d406930a01ce9b29bcfb7a6, O_RDWR) failed: No such file or directory (2) in Unknown on line 0
Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (1;/tmp) in Unknown on line 0
<<<
takze v php.ini mam: session.save_path = "c:\tmp" a vypisuje to ty tri hlasky, ktere jsou nekolik prispevku nazpatek... a pritom se v "c:\tmp" vesele tvori ty prazdne soubory "sess_xxx...xxx",
dulezite ale je, ze to funguje tady na wz.cz
btw: nevite o nejakem free_web_hostingu s moznosti pouziti https?...
jezz: Mas spatne nastavenou cestu session.save_path v php.ini
toz dobre, co tam mam ale napsat?
ak sa ti tam tvoria tie session subory (sess....), tak by konfiguracia mala byt v poriadku, mozno prava na dany adresar nie su dobre nastavene, skontroluj ci je to povolene pre everybody....
pinkynew: Bezi-li Apache jako sluzba, pak je to standardne ucet SYSTEM, a to by melo bejt defaultne OK
Sojkovec: hej, to mas pravdu...
potom neviem kde moze byt chyba.
ked som si nastavoval sessiony, stacilo ich povolit a nastavit save_path a funguje mi to bez problemov... :-|
Běží-li Apache jako služba, měl by běžet s minimálními právy.
Kit: No a on bezi s maximalnimi :-))
Tak to je chyba. Když ho někdo hackne, dostane se do systému. Ještě se dává do chrootovaného prostředí kvůli zvýšení bezpečnosti.
Kit: lze to nastavit, ale vychozi nastaveni je opravdu MS_FULL_ACCESS_TO_YOUR_SYSTEM (tm) :)
U mne má Apache práva skutečně jen minimální - v default instalaci a funguje. Jak je to možné?