mam zarejestrowane 3 zmienne sesyjne np a1,a2,a2 funkcją session_register. Teraz mam pytanie , w skrypcie z formularza dostaja one jkas wartosc , czy jezeli wpisze (wymusze) z paska adresu parametr np http://adres.strony/cos.php?a1='ddd' to zmienna a1 przyjmiej wartosc ddd czy ta z formularza?
Bo testuje i widze ze raczej nie przyjmują wartosci zmienne zmieniane z paska adresu. Jak to jest ?
wartości z sesji w $_SESSION, z ciastek w $_COOKIES, z adresu w $_GET, z formularza w $_POST, nie nadpisują się chyba że masz włączone (niezalecane) register globals, wtedy jest to co ostatnie zostało zapisane, w pierwszej kolejności adres, formularz, potem ciastka, sesja czyli jeśli w sesji i adresie będzie zmienna $a to przyjmie ona wartość z sesji
Adamo napisał(a)
nie nadpisują się chyba że masz włączone (niezalecane) register globals, wtedy jest to co ostatnie zostało zapisane, w pierwszej kolejności adres, formularz, potem ciastka, sesja czyli jeśli w sesji i adresie będzie zmienna $a to przyjmie ona wartość z sesji
Hmm dziwne bo mam register_globals na ON a mi nie nadpisuje zmiennych z paska adresu takze nie wiem ....
prosty test, php.ini -> register_globals = on
plik index.php:
<?php
setcookie('test', 'ciacha');
session_start();
$_SESSION['test'] = 'sesji';
?><html><body onload="document.forms['forma'].submit()"><form name="forma" method="post" action="test.php?test=get&"><input type="hidden" name="test" value="posta"></form></body></html>
plik test.php:
<?php
session_start();
echo 'Dane pobrane z '.$test.' !!';
?>
Wywołanie index.php wyświetla "Dane pobrane z sesji"
po zakomentowaniu linijek session_start wyświetla "Dane pobrane z ciacha"
po usunięciu ciacha i wykomentowaniu linii ustawiającej je wyświetla "Dane pobrane z posta", jak usuniemy pole "test" z formularz to dopiero wtedy wyświetli "Dane pobrane z get". Ale wyłącz do jasnej ciasnej to register_globals bo to jest wszystko głupie i musisz się bardziej przez to starać żeby nie narobić dziur w skryptach
Adamo: Racją jest, że register_globals jest głupie, niezalecane i niebezpieczne. Ale jeśli chodzi o kolejność nadpisywania, to nie zawsze jest tak, jak piszesz. Wszystko zależy od ustawień w php.ini
aha, fuckt, odpowiada za to dyrektywa variables_order w php.ini, u mnie jest ona ustawiona na:
EGPCS
co oznacza kolejność Environment, Get, Post, Cookies, Session
czyli jeśli register_globals = on i ostatnia literka w variables_order to G no to koniec świata ;P raj dla poszukiwaczy dziury w całym
Adamo napisał(a)
EGPCS
co oznacza kolejność Environment, Get, Post, Cookies, Session
A jakie sa jeszcze mozliwosci ?
wszystkie słowa złożone z liter "EGPCS" :) czyli jak sobie zapragniesz, tak bedzie.
nav napisał(a)
wszystkie słowa złożone z liter "EGPCS" :) czyli jak sobie zapragniesz, tak bedzie.
A mozna cos wywalic zeby w ogole nie wchodzilo ?
Glina napisał(a)
nav napisał(a)
wszystkie słowa złożone z liter "EGPCS" :) czyli jak sobie zapragniesz, tak bedzie.
A mozna cos wywalic zeby w ogole nie wchodzilo ?
register_globals = off
i nie będzie nawet patrzeć na kolejność tych literek, cały czas zresztą to piszę żebyś zrobił
bo jak nawet wywalisz z tej zmiennej wszystkie literki to przyjmie wartość domyślną czyli właśnie EGPCS a jak pominiesz jedną z tych literek to tak jakby była ona na początku
Adamo napisał(a)
register_globals = off
i nie będzie nawet patrzeć na kolejność tych literek, cały czas zresztą to piszę żebyś zrobił
bo jak nawet wywalisz z tej zmiennej wszystkie literki to przyjmie wartość domyślną czyli właśnie EGPCS a jak pominiesz jedną z tych literek to tak jakby była ona na początku
No dobra lumam temat, tylko powiedz mi majac zmienna sesyjna np $a jezeli na mojej stronie przy wł. register_globals (ON) wpisze w pasku adresu: moja.strona.php?a=lalalala to czy zmienna sesyjna powinna zostac nadpisana ? </quote>
no nie powinna, ale żeby mieć pewność to musisz odczytywać własną funkcją, albo stan variables_orded a jak dasz register_globals na off to nie musisz się niczym martwić tylko tym żebyś pamiętał te parę literek dopisać za każdym razem
Adamo napisał(a)
no nie powinna, ale żeby mieć pewność to musisz odczytywać własną funkcją, albo stan variables_orded a jak dasz register_globals na off to nie musisz się niczym martwić tylko tym żebyś pamiętał te parę literek dopisać za każdym razem
Dałem register_globals na OFF i w ogóle mi sie zmienne nie nadpisują, nawet z programu , cos jeszcze trzeba dopisac?
pewnie odczytujesz je "normalnie" a ma być:
$_GET['a']
$_POST['a']
$_SESSION['a']
itd.