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