Računala Windows Internet

Koja je razlika između HTTP_HOST i SERVER_NAME u PHP -u? PHP globalni niz $ _SERVER Dohvaćanje varijable okruženja HTTP_X_FORWARDED_FOR

$ _SERVER jedan je od najvažnijih unaprijed definiranih nizova u PHP -u. Sadrži varijable primljene od poslužitelja od strane PHP tumača. Svi su koristili ove varijable ili će ih definitivno koristiti jer je bez njih prilično teško organizirati potpunu podršku za web aplikacije.

U svom članku predlažem tablicu s glavnim varijablama $ _SERVER superglobalnog niza. Tablica je slična onoj za PHP string funkcije.

Da biste vidjeli sve elemente niza $ _SERVER, trebate: a) pozvati funkciju print_r () koja će ispisati niz; b) ili pozovite funkciju phpinfo () koja će prikazati informacije o PHP interpreteru.

Ukratko o $ HTTP_SERVER_VARS

Superglobalni niz $ _SERVER zamjenjuje niz $ HTTP_SERVER_VARS u PHP 4.1.0. $ HTTP_SERVER_VARS sada se ne koristi, ali vrijedi znati o tome. Prije svega, stara verzija nije bila autoglobalna. Druga je razlika u tome što neki elementi niza $ _SERVER ne postoje u $ HTTP_SERVER_VARS, iako su u većini slučajeva njihove varijable iste.

Element

Kratki opis

Primjer

$ _SERVER ["DOCUMENT_ROOT"]

Sadrži put do korijenskog direktorija poslužitelja.

$ _SERVER ["HTTP_HOST"]

$ _SERVER ["SERVER_NAME"]

$ _SERVER ["SCRIPT_FILENAME"]

Sadrži naziv skripte, počevši od korijenskog direktorija virtualnog hosta.

C: \ mapa \ index.php

/www/folder/index.php

$ _SERVER ["PHP_SELF"]

$ _SERVER ["SCRIPT_NAME"]

Sadrži naziv skripte.

$ _SERVER ["REQUEST_URI"]

Sadrži naziv skripte, počevši od korijenskog direktorija domaćina tvrtke, kao i parametre proslijeđene GET metodom.

/www/folder/index.php?page=2&num=5

$ _SERVER ["QUERY_STRING"]

Sadrži parametre proslijeđene skripti metodom GET.

Za adresu

http://site.com/index.php?page=2&num=5

bit će ispisan

$ _SERVER ["REQUEST_METHOD"]

Sadrži metodu zahtjeva koja se koristi za dozivanje skripte.

DOBITI ili POST

$ _SERVER ["HTTP_REFERER"]

Sadrži adresu stranice s koje je posjetitelj došao.

http://yandex.ru/yandsearch

$ _SERVER ["HTTP_USER_AGENT"]

Sadrži vrstu i verziju preglednika i operacijskog sustava posjetitelja. Također može otkriti robote za pretraživanje i marku mobitela. Ispod je usporedba marke telefona i njegove šifre u nizu.

Nokia - NOKIJA; Sony Ericsson - ERICSSON ili SONYERICSSON; Samsung - SAMSUNG ili SEC-; Motorola - MOT; LG - LG ili LG-; Alcatel - ALCATEL; Panasonic - PANASONIC; Sagem - SAGEM; Pantech - PANTECH; Siemens - SIE; BenQ - BENQ; NEC - NEC; Oštro - OŠTRO.

Mozilla / 4.0 (kompatibilno; MSIE 6.0; Windows NT 5.1) ( IE 6iWindows XP)

Mozilla / 4.0 (kompatibilno; MSIE 7.0; Windows NT 5.0) Opera 9.50 ( Opera 9.5iWindows 2000)

$ _SERVER ["REMOTE_ADDR"]

Sadrži IP adresu klijenta.

$ _SERVER ["SERVER_ADDR"]

Sadrži IP adresu poslužitelja.

$ _SERVER ["HTTP_ACCEPT"]

Opisuje sklonost klijenta prema vrsti dokumenta. Sadržaj ovog elementa preuzima se iz zaglavlja Prihvati HTTP koje klijent prosljeđuje poslužitelju.

Izlazni format: MIME tip [[; q], drugi MIME tip [; q] ...]

Može postojati nekoliko željenih MIME vrsta, a zatim su odvojene zarezima. * koristi se za postavljanje predloška, ​​grupiranje. q - koeficijent preferencije, prema zadanim postavkama 1, kreće se od 0 do 1.

image / jpeg, image / x-xbitmap, aplikacija / x-shockwave-flash

image / *; q = 0,5, slika / jpeg (preferira zhpeg od svih ostalih formata)

$ _SERVER ["HTTP_ACCEPT_LANGUAGE"]

Slično prethodnom elementu, ali povezano s jezičnim preferencijama. Može se koristiti za utvrđivanje nacionalnosti posjetitelja. No, procjena će biti približna, jer neki ljudi vole koristiti engleske inačice preglednika

ru, en; q = 0,9 (preferira se ruski, ali ako ga nema - bit će i engleski)

$ _SERVER ["HTTP_ACCEPT_CHARSET"]

Slično prethodnim. Sadrži zaglavlje Accept-Charset

$ _SERVER ["HTTP_ACCEPT_ENCODING"]

Slično prethodnim. Sadrži zaglavlje Accept-Encoding

$ _SERVER ["SERVER_PORT"]

Sadrži poslušački port poslužitelja.

$ _SERVER ["SERVER_SOFTWARE"]

Sadrži podatke o web poslužitelju.

Apache / 2.2.4 (Win32)

$ _SERVER ["SERVER_PROTOCOL"]

Sadrži verziju HTTP protokola.

$ _SERVER ["GATEWAY_INTERFACE"]

Sadrži verziju CGI -a koju koristi web poslužitelj.

$ _SERVER ["REQUEST_TIME"]

Vrijeme početka zahtjeva web stranice u UNIX formatu. Dostupno od PHP 5.1.0

Puna adresa stranice s parametrima:

echo "http: //" .SERVER_NAME. $ _ SERVER ["REQUEST_URI"];
?>

Tablica sa svim funkcijama može se preuzeti s veze u * .doc formatu.

Obratite posebnu pozornost na varijablu $ _SERVER ["REQUEST_URI"] i ne zaboravite je provjeriti! Stvar je u tome da njegova uporaba možda nije osobito sigurna. Na primjer, na vašoj web lokaciji neki se URL -ovi generiraju pomoću ovog parametra. Zatim možete upisati vezu http://site.com/index.php u redak preglednika? ”>... Ovo će otvoriti prozor koji prikazuje sadržaj datoteke kolačića. Ovaj je primjer bezopasan, ali je rupa kroz koju haker može iskoristiti proboj, na primjer, za krađu podataka od drugog korisnika. Stoga - provjerite ima li varijabla nevažećih znakova, osobito> i<.

Za danas, možda, sve. Do sljedećeg puta i sretan vikend!

JavaScript je blokiran u vašem pregledniku. Omogućite JavaScript da web stranica radi!

Superglobalni niz $ _SERVER

U niz $ _SERVER PHP tumač stavlja varijable primljene od poslužitelja. Bez ovih varijabli teško je pružiti potpunu podršku web aplikacijama. Slijedi opis najvažnijih elemenata superglobalnog niza $ _SERVER.

Komentar

  • Pogledajte cijeli popis elemenata niza $ _SERVER
  • možete koristiti funkciju print_r () koja ispisuje ispis niza ili funkciju phpinfo () koja prikazuje informacije o PHP interpreteru.

    Polje (=> uključeno => 200 => uključeno => htmlweb.ru => https => 443 => zatvori => Mozilla /5.0 (kompatibilno; Googlebot /2.1; + http: //www.google.com/bot. html) => * / * => beget = begetok; => gzip, deflate => / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin = > => Apache / 2.4.25 (Debian) mpm-itk / 2.4.7-04 OpenSSL / 1.0.2l => htmlweb.ru => 185.12.92.137 => 80 => 144.76.78.4 => / var / www / htmlweb/data/www/htmlweb.ru => http => => /var/www/htmlweb/data/www/htmlweb.ru => [zaštićena e -pošta]=>. php => 35242 => /php/funkcija/$_server.php => CGI /1.1 => HTTP /1.0 => DOBIJI => => /php/funkcija/%24_server.php => /index.php => /index.php => 1560059525.711 => 1560059525) 1

    $ _SERVER [" DOCUMENT_ROOT"]

    Element $ _SERVER ["DOCUMENT_ROOT"] sadrži put do korijenskog direktorija poslužitelja, ako se skripta izvršava na virtualnom hostu, ovaj element sadrži put do korijenskog direktorija virtualnog hosta. Oni. u konfiguracijskoj datoteci httpd.conf virtualni host ima direktivu DocumentRoot, kojoj je dodijeljena vrijednost "D: / main", element $ _SERVER ["DOCUMENT_ROOT"] će sadržavati vrijednost "D: main".

    $ _SERVER [" DALJINSKI_ADDR"]

    Element $ _SERVER ["REMOTE_ADDR"] sadrži IP adresu klijenta. Prilikom testiranja na lokalnom stroju, ova adresa bit će 127.0.0.1. Međutim, pri testiranju na mreži, varijabla će vratiti IP adresu klijenta ili posljednjeg proxy poslužitelja preko kojeg je klijent došao do poslužitelja. Ako klijent koristi proxy poslužitelj, njegovu IP adresu možete saznati pomoću varijable okruženja HTTP_X_FORWARDED_FOR, čija se vrijednost može dobiti pomoću funkcije getenv ().

    Komentar

    Proxy poslužitelji su posebni posrednički poslužitelji koji pružaju posebnu vrstu usluge: kompresiju prometa, šifriranje podataka, prilagodbu za mobilne uređaje itd. Među mnogim proxy poslužiteljima razlikuju se takozvani anonimni proxy poslužitelji koji vam omogućuju skrivanje prave IP adrese klijenta; takvi poslužitelji ne vraćaju varijablu okruženja HTTP_X_FORWARDED_FOR.

    Izdvajanje varijable okoline HTTP_X_FORWARDED_FOR

    echo @getenv (HTTP_X_FORWARDED_FOR);

    $ _SERVER [" SCRIPT_FILENAME"]

    Element $ _SERVER ["SCRIPT_FILENAME"] sadrži apsolutni put do datoteke iz korijena diska. Dakle, ako poslužitelj ima operacijski sustav Windows, onda bi ova staza mogla izgledati ovako "d: main estindex.php", tj. put je naveden s diska, u operacijskom sustavu sličnom UNIX-u put je naveden iz korijenskog direktorija/, na primjer, "/var/share/www/test/index.php".

    /var/www/htmlweb/data/www/site/index.php

    $ _SERVER [" SERVER_NAME"]

    Element $ _SERVER ["SERVER_NAME"] sadrži naziv poslužitelja, u pravilu isti kao i naziv domene web stranice koja se na njemu nalazi. Na primjer,

    Sadržaj elementa $ _SERVER ["SERVER_NAME"] često je isti kao sadržaj elementa $ _SERVER ["HTTP_HOST"]. Osim naziva poslužitelja, superglobalni niz $ _SERVER omogućuje vam da saznate brojne parametre poslužitelja, na primjer, IP adresu poslužitelja, port za slušanje, koji je web poslužitelj instaliran i verziju HTTP protokola . Ti se podaci nalaze u $ _SERVER ["SERVER_ADDR"], $ _SERVER ["SERVER_PORT"], $ _SERVER ["SERVER_SOFTWARE"] i $ _SERVER ["SERVER_PROTOCOL"], respektivno. Ispod je primjer korištenja ovih stavki.

    Korištenje elemenata niza $ _SERVER

    echo "Naziv poslužitelja je". $ _ SERVER ["SERVER_NAME"]. "
    "; echo" IP poslužitelja je ". $ _ SERVER [" SERVER_ADDR "]."
    "; echo" Ulaz poslužitelja je ". $ _ SERVER [" SERVER_PORT "]."
    "; echo" Web poslužitelj - ". $ _ SERVER [" SERVER_SOFTWARE "]."
    "; echo" Verzija HTTP protokola - ". $ _ SERVER [" SERVER_PROTOCOL "]."
    ";

    Naziv poslužitelja - web mjesto
    IP poslužitelja - 185.12.92.137
    Ulaz poslužitelja - 80
    Web poslužitelj-Apache / 2.4.25 (Debian) mpm-itk / 2.4.7-04 OpenSSL / 1.0.2l
    Verzija HTTP protokola - HTTP / 1.0

    $ _SERVER [" REQUEST_METODA"]

    Element $ _SERVER ["REQUEST_METHOD"] sadrži metodu zahtjeva koja se koristi za pozivanje skripte: GET ili POST.

    Ponovite odjeljak $ _SERVER ["REQUEST_METHOD"];

    $ _SERVER [" QUERY_STRING"]

    Element $ _SERVER ["QUERY_STRING"] sadrži parametre proslijeđene skripti ako je niz upita adresa

    Na primjer, kada se misli na:
    element $ _SERVER ["QUERY_STRING"] sadržavat će sav tekst iza znaka "?":

    Ponovite odjeljak $ _SERVER ["QUERY_STRING"];

    id = 1 & test = mokro & id_theme = 512

    $ _SERVER [" PHP_SELF"]

    Element $ _SERVER ["PHP_SELF"] sadrži naziv skripte, počevši od korijenskog direktorija virtualnog hosta, tj. ako je niz upita adresa http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 tada će element $ _SERVER ["PHP_SELF"] sadržavati isječak "/test/index.php"... Obično se isti fragment postavlja u element $ _SERVER ["SCRIPT_NAME"].

    $ _SERVER [" REQUEST_URI"]

    Element $ _SERVER ["REQUEST_URI"] sadrži naziv skripte, počevši od korijenskog direktorija virtualnog hosta i parametre, tj. ako je niz upita adresa: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 tada će element $ _SERVER ["REQUEST_URI"] sadržavati isječak "/test/index.php?id=1&test=wet&id_theme=512"... Da biste vratili punu adresu u skripti, koja se nalazi u retku upita, dovoljno je koristiti kombinaciju elemenata niza $ _SERVER, dolje prikazanih

    Puna adresa scenarija

    echo "http: //". $ _ SERVER ["SERVER_NAME"]. $ _ SERVER ["REQUEST_URI"];
    • Prijevod
    • Vodič

    Jedna od najhladnijih novih značajki u php 5.4 je ugrađeni poslužitelj izgrađen posebno za razvoj i testiranje. Sada možete pisati i testirati svoj kôd bez potpunog web poslužitelja - samo pokrenite ugrađeni poslužitelj, testirajte svoj kôd i isključite ga kad završite.
    Poslužitelj također pruža mogućnost kreativne uporabe. Na primjer, možete distribuirati prijenosnu web aplikaciju na CD -u ili USB -u ili čak kao stolnu aplikaciju ugrađenu u PHP bez upotrebe GTK -a ili drugih grafičkih biblioteka.

    PHP priručnik naglašava da je ugrađeni poslužitelj namijenjen razvoju i da se preporučuje da se ne koristi na proizvodnom poslužitelju. Ne postoje INI direktive odgovorne za poslužitelj (osim obojenja izlaza u konzoli), a čini se da je glavna ideja dokumentacije: "Sada imamo i web poslužitelj, ostavite nas na miru."
    Bez obzira na to, vjerujem da ugrađeni poslužitelj može biti vrijedan alat za razvoj i testiranje. Na primjer, na svom računalu koristim unaprijed instalirani Apache s prilagođenom konfiguracijom koja mi odgovara, ali ponekad želim isprobati neke nove web aplikacije. Pomoću ugrađenog web poslužitelja mogu testirati aplikaciju izravno iz mape za preuzimanje ili privremene mape i premjestiti je u normalno okruženje samo po potrebi.
    No za početak, to nije tako jednostavno jer mnoge pisane aplikacije koriste .htaccess i mod_rewrite. Ali siguran sam da će netko (možda netko od vas, zašto ne?) Napisati adapter za ovo, a ja bih želio biti prvi koji će ga testirati.
    U ovom ću članku objasniti neke osnovne primjere korištenja ugrađenog poslužitelja i pokazati vam kako ga učiniti korisnim za razvoj i testiranje.

    Koristimo ugrađeni poslužitelj

    Dakle, za korištenje poslužitelja potreban nam je php 5.4 ili noviji. Da biste provjerili verziju PHP -a, pokrenite:
    php -v
    Također možete utvrditi je li poslužitelj dostupan u vašem sklopu tako što ćete pokrenuti:
    php -h
    i tamo potražite opis opcija "-S" i "-t", koje se koriste samo za poslužitelj.
    Da biste provjerili poslužitelj, možete stvoriti datoteku index.php u trenutnom direktoriju, koja će sadržavati poziv na funkciju phpinfo (), a zatim pokrenuti poslužitelj:
    $ php -S 127.0.0.1:8080 PHP 5.4.0RC7 Razvojni poslužitelj počeo je u pet, 26. veljače 18:49:29 2012 Slušanje na 127.0.0.1:8080 Korijen dokumenta je / home / ec2-user Pritisnite Ctrl-C za izlaz.
    Sada možete vidjeti sadržaj koji poslužuje ugrađeni web poslužitelj:

    Svaki zahtjev klijenta bit će napisan na konzolu:
    80.180.55.37:36318 : / 80.180.55.37:36584 : /
    Vraćajući se, pogledajmo parametar naredbenog retka "-S", koji se koristi za navođenje adrese s koje će poslužitelj biti dostupan. Moguće vrijednosti:
    localhost- poslužitelju će biti dostupan samo s lokalnog računala,
    0.0.0.0 - na bilo kojem sučelju stroja,
    Bilo koji vanjski ili sivi IP- samo na navedenom IP -u
    Opcija -t postavlja navedeni korijen direktorija. Na primjer:
    $ php -S : 8090 -t / home / ec2 -user / public
    Osim,. možete odrediti naziv određene datoteke usmjerivača. Na primjer:
    $ php -S> localhost ili vaš javni IP>: 8080 -t / home / ec2 -user / public public / index.php
    Poslužitelj će raščlaniti i izvršiti izlaz ovog usmjerivača. Jednostavan primjer:
    Dobro došli u PHP

    ";
    Ako skripta vrati FALSE, poslužitelj će obraditi traženi URI, koji će izdati traženi resurs ili će vratiti grešku 404. Ako skripta vrati bilo što drugo, izlaz skripte bit će proslijeđen klijentu.
    Iako nam ovaj pristup daje veću kontrolu, morate znati nekoliko stvari. Prvo, PHP poslužitelj šalje samo minimalni skup HTTP zaglavlja:
    Veza: zatvorena-Content-Type: text / html Domaćin: aws-dev-01.vtardia.com X-Powered-By: PHP / 5.4.0RC7 D
    Usporedite ovo sa zaglavljima koja vraća Apache poslužitelj:
    Prihvatljivi rasponi: bajtovi Veza: Keep-Alive Sadržaj-Trajanje: 631-Content-Type: text / html Datum: Sat, 04 Feb 2012 18:24:42 GMT Etag: "bbb99-277-4ace8c5470a40" Keep-Alive: timeout = 15, max = 100 Zadnja izmjena: sri, 14. rujna 2011. 15:54:09 GMT Poslužitelj: Apache / 2.2.21 (Unix) DAV / 2
    Ako vaša aplikacija koristi zaglavlja, tada mora uzeti u obzir razliku u razvojnom i proizvodnom okruženju.
    Drugo, ugrađeni poslužitelj ima drugačiji SAPI (API poslužitelja). Dakle, izvođenjem usmjeravanja u index, php možete definirati poziv skripti na testnom ili proizvodnom poslužitelju. php_sapi_name () vratit će "cli-server" na ugrađenom poslužitelju:
    Postoji jedna posebna INI direktiva koja se zove "cli_server.color". Ova direktiva vraća obojeni izlaz na konzolu. Napravite praznu datoteku s imenom cli-server.ini i umetnite ovaj redak:
    cli_server.color = uključeno
    Možete stvoriti jedinstvenu konfiguraciju okruženja za svoj poslužitelj navođenjem potrebnih direktiva u vašoj INI datoteci. Neprijavljene direktive prihvatit će svoje zadane vrijednosti. Sada smo proglasili samo jednu direktivu - cli_server.boja.
    Pokrenite poslužitelj s parametrom "-c" koji navodi INI datoteku:
    $ php -S localhost -c cli -server.ini
    Ako vaš terminal podržava boje, tada biste trebali moći vidjeti "obojeni" izlaz na konzoli. Status 200 bit će označen zelenom bojom, 404 narančastom bojom, a pogreške skripte bit će označene crvenom bojom.

    Izrađujemo osobni poslužitelj

    Sada kada znate sve što trebate znati o ugrađenom poslužitelju, učinimo nešto super. Kreirajmo vlastiti prijenosni poslužitelj!
    Počet ću sa sljedećom strukturom naše aplikacije:

    Mapa knjižnice sadrži kôd aplikacije, public je korijenski direktorij, sadrži index.php i neke statičke datoteke. Ovaj vodič će se usredotočiti na mapu "poslužitelj", pa će se naša aplikacija sastojati od jednostavnog "Hello Word!" i nekoliko slika i css.
    Naš je cilj moći pokrenuti poslužitelj iz direktorija aplikacija s jednom naredbom, a naš će se poslužitelj pobrinuti za usmjeravanje, HTTP zaglavlja i pogreške.
    $ ./start.sh
    Pogledajmo početnu skriptu:
    #! /bin /bash INIFILE = "$ (pwd) /server/server.ini" DOCROOT = "$ (pwd) /public" ROUTER = "$ (pwd) /server/router.php" HOST = 0.0.0.0 PORT = 8080 PHP = $ (koji php) ako [$? ! = 0]; zatim odjekni "Nije moguće pronaći PHP" izlaz 1 fi $ PHP -S $ HOST: $ PORT -c $ INIFILE -t $ DOCROOT $ ROUTER
    Pretpostavljam da se skripta pokreće iz direktorija aplikacije, pa su INIFILE, DOCROOT, ROUTER definirani pomoću pwd -a. Put do php -a određuje se pomoću naredbe which. Ako php nije pronađen u korisnikovom $ PATH, skripta neće uspjeti s pogreškom.
    Ovo radi dovoljno dobro, ali dajmo korisniku mogućnost da promijeni bilo koji od zadanih parametara iz naredbenog retka, na primjer:
    ako [! -z $ INIFILE]; tada INIFILE = "$ (pwd) /server/server.ini" fi
    Nadalje, mapa "pogreške" sadrži datoteke za HTTP poruke o pogreškama. Evo primjera greške 403: iako sam koristio samo HTML, skripta će biti uključena, ja je koristim uključuju pa možete koristiti bilo koji php kod:
    403

    403 Zabranjeno

    Nažalost, traženi resurs nije dostupan.



    Pogledajmo sada router.php. Zadatak ove datoteke je primiti i upravljati svim zahtjevima te ih prenijeti na poslužitelj samo ako ta datoteka postoji. Spajanjem predloška prikazuju se sve stranice s pogreškama.
    U prvim retcima definiram neke globalne parametre kao što je DIRECTORY_INDEX, direktorij s predlošcima pogrešaka. Parametar date_default_timezone_set () mora odgovarati postavkama OS -a, u protivnom će doći do nedosljednosti između unosa u zapisniku i na poslužitelju. Dodao sam i popis dopuštenih IP adresa radi poboljšanja sigurnosti.
    Funkcija logAccess () neophodna je jer kada skripta usmjeravanja prihvati zahtjev, dnevnik poslužitelja se prema zadanim postavkama zanemaruje. Funkcija prihvaća samo statusni kôd, a izlazni format u potpunosti je u skladu s formatom poslužitelja.
    Naš prvi zadatak je provjera sigurnosti. Ako IP klijenta nije u nizu dopuštenih IP adresa, prikažite poruku o pogrešci i izađite iz skripte. Moramo dati statusni kod osim 200 i funkcija header () ovdje neće raditi, pa koristimo novu funkciju - http_response_code.
    Ako je IP klijenta u nizu dopuštenih IP adresa, naš sljedeći korak je dobiti traženu putanju i datotečni nastavak. Ako je proširenje prazno, pretpostavljamo da korisnik traži mapu i gradi put pomoću DIRECTORY_INDEX -a koji je prvo definiran.
    Konačno, ako tražena datoteka postoji, vratite FALSE i dopustite poslužitelju da pogleda datoteku. Ako nije, prikazuje se poruka o pogrešci 404.

    Sažetak

    To je sve. Kao što vidite, php poslužitelj je jednostavan za korištenje. Naš osobni poslužitelj je vrlo jednostavan. Kôd se može optimizirati i ugraditi u složenije i funkcionalnije klase. Sretno kodiranje!

    p.s. Rado ću prihvatiti kritike i komentare na prijevod u osobno.

    I to je ono što je klijent zapravo koristio kao "ciljno domaćinstvo" zahtjeva. SERVER_NAME je definiran u konfiguraciji poslužitelja. Koja ovisi o tome što vam treba. Sada biste trebali shvatiti da je to vrijednost koju kontrolira klijent, pa stoga ne može biti pouzdana za upotrebu u poslovnoj logici, a druga je vrijednost koju kontrolira poslužitelj, koja je pouzdanija. Međutim, morate biti sigurni da web poslužitelj ima ispravnu konfiguraciju SERVER_NAME. Uzimajući za primjer Apache HTTPD, evo izvatka iz njegove dokumentacije:

    Ako ServerName nije navedeno, tada poslužitelj pokušava zaključiti ime hosta izvršavanjem obrnutog pretraživanja IP adrese. Ako nijedan port nije naveden u ServerName, poslužitelj će koristiti port iz dolaznog zahtjeva. Za optimalnu pouzdanost i predvidljivost morate navesti izričit naziv hosta i port pomoću smjernice ServerName.

    Osvježiti: nakon provjere Pekkinog odgovora na vaše pitanje koje sadrži vezu na bobinčev odgovor da će PHP uvijek vratiti vrijednost HTTP_HOST za SERVER_NAME, što je u suprotnosti s mojim vlastitim iskustvom s PHP 4.x + Apache HTTPD 1.2.x od prije nekoliko godina, Otpuhnuo sam prašinu sa svog trenutnog XAMPP -a u sustavu Windows XP (Apache HTTPD 2.2.1 s PHP 5.2.8), pokrenuo ga, stvorio PHP stranicu koja ispisuje obje vrijednosti, stvorio Java testnu aplikaciju koristeći URLConnection za promjenu zaglavlja hosta, a testovi su me naučili da je to doista (netočno) slučaj.

    Nakon što smo prvo posumnjali na PHP i ukopali se u neke Prijavljivanje PHP grešakašto se tiče teme, otkrio sam da je korijen problema na web poslužitelju u upotrebi, da nije ispravno vratio zaglavlje HTTP hosta kada je zatražen SERVER_NAME. Pa sam se ukopao Apache HTTPD prijavljivanje pogrešaka koristeći razne ključne riječi u vezi s temom i konačno sam pronašao srodnu pogrešku. Ovo ponašanje uvedeno je otprilike oko Apache HTTPD 1.3. Morate uključiti direktivu UseCanonicalName u unosu ServerName u httpd.conf (provjerite i upozorenje pri dnu dokumenta!).

    ServerName example.com UseCanonicalName uključeno

    Ovo mi je upalilo.

    Općenito, SERVER_NAME je pouzdaniji, ali vi ovisna u konfiguraciji poslužitelja!

    HTTP_HOST ciljni je host poslan od strane klijenta. Korisnik može slobodno manipulirati korisnikom. Nije potrebno slati zahtjev na vaše web mjesto sa zahtjevom HTTP_HOST za vrijednost www.stackoverflow.com.

    SERVER_NAME dolazi iz definicije poslužitelja VirtualHost i stoga se smatra pouzdanijim. Također se njime može izvana manipulirati pod određenim uvjetima koji se odnose na postavljanje vašeg web poslužitelja. Pogledaj ovo Ovo SO pitanje koji se bavi sigurnosnim aspektima obje opcije.

    Ne morate se oslanjati da biste bili sigurni. Međutim, koji ćete koristiti doista ovisi o tome što želite učiniti. Ako želite odrediti na kojoj domeni vaša skripta radi, možete sigurno koristiti HTTP_HOST sve dok nevažeće vrijednosti koje dolaze od napadača ne mogu ništa slomiti.

    Imajte na umu da ako želite koristiti IPv6, vjerojatno želite koristiti HTTP_HOST, a ne SERVER_NAME. Ako unesete http: // [:: 1] /, varijable okruženja su sljedeće:

    HTTP_HOST = [:: 1] SERVER_NAME = :: 1

    To znači da ako, na primjer, učinite mod_rewrite, mogli biste dobiti neugodan rezultat. Primjer SSL preusmjeravanja:

    # SERVER_NAME NEĆE raditi - Preusmjeravanje na https: // :: 1 / RewriteRule. * Https: //% (SERVER_NAME) / # HTTP_HOST će raditi - Preusmjeravanje na https: // [:: 1] / RewriteRule. * Https: //% (HTTP_HOST) /

    Ovo se SAMO primjenjuje ako poslužitelju pristupate bez imena hosta.

    ako želite provjeriti putem server.php ili onoga što želite nazvati sa sljedećim:

    Zatim pristupite svim važećim URL -ovima za svoju web lokaciju i provjerite razliku.

    Trebalo mi je neko vrijeme da shvatim što ljudi misle pod "SERVER_NAME pouzdaniji". Koristim zajednički poslužitelj i nemam pristup direktivama o virtualnom hostu. Dakle, koristim mod_rewrite u .htaccessu za mapiranje različitih HTTP_HOST -ova u različitim direktorijima. U ovom slučaju ova vrijednost HTTP_HOST ima smisla.

    Slična je situacija ako koristite virtualne hostove zasnovane na imenima: smjernica ServerName unutar virtualnog domaćina jednostavno kaže koje će ime hosta biti mapirano na taj virtualni host. Zaključak je da se u oba slučaja ime hosta koje klijent navede tijekom zahtjeva (HTTP_HOST) mora podudarati s imenom na poslužitelju koji se sam preslikava u direktorij. Je li mapiranje izvedeno pomoću direktiva virtualnog hosta ili s pravilima htaccess mod_rewrite ovdje je sporedno. U tim će slučajevima HTTP_HOST biti isti kao SERVER_NAME. Drago mi je da je Apache ovako konfiguriran.

    Međutim, situacija se razlikuje od virtualnih hostova zasnovanih na IP-u. U ovom slučaju, i samo u ovom slučaju, SERVER_NAME i HTTP_HOST mogu biti različiti, jer sada klijent odabire poslužitelj prema IP -u, a ne prema imenu. Doista, mogu postojati posebne konfiguracije gdje je to važno.

    Stoga ću od sada koristiti SERVER_NAME u slučaju da se moj kôd ugura u ove posebne konfiguracije.

    Pod pretpostavkom da imate jednostavno postavljanje (CentOS 7, Apache 2.4.x i PHP 5.6.20) i samo jednu web stranicu (bez zajedničkog hostinga) ...

    U PHP smislu, $ _SERVER ["SERVER_NAME"] je PHP element registriran u superklasi $ _SERVER na temelju vaše Apache konfiguracije (** ImeNoza ** s direktivom s UseCanonicalName Uključeno) u httpd.conf (bilo iz omogućene konfiguracije virtualnog hosta) datoteka, bilo što itd.). HTTP_HOST zaključuje se iz zaglavlja HTTP hosta. Tretirajte to kao korisnički unos. Filtrirajte i provjerite prije upotrebe.

    Evo primjera gdje koristim $ _SERVER ["SERVER_NAME"] kao osnovu za svoju usporedbu. Sljedeća metoda je za određenu podređenu klasu, koju sam nazvao ServerValidator (dijete Validatora). ServerValidator provjerava šest ili sedam stavki u $ _SERVER -u prije njihove upotrebe.

    Prilikom utvrđivanja je li HTTP zahtjev POST, koristim ovu metodu.

    Javna funkcija jePOST () (return (($ this-> requestMethod === "POST") && // Zanemari $ this-> hasTokenTimeLeft () && // Zanemari $ this-> hasSameGETandPOSTIdentities () && // Ingore ($ this -> httpHost === filter_input (INPUT_SERVER, "SERVER_NAME"))));)

    Do trenutka kada se ova metoda pozove, bit će obavljeno sve filtriranje i provjera valjanosti odgovarajućih elemenata $ _SERVER (i njihovih odgovarajućih skupova svojstava).

    ($ this-> httpHost === filter_input (INPUT_SERVER, "SERVER_NAME")

    Provjerava da li se vrijednost $ _SERVER ["HTTP_HOST"] (u konačnici izvedena iz zatraženog zaglavlja HTTP hosta) podudara s $ _SERVER ["SERVER_NAME"].

    Sada koristim superglobalni razgovor da objasnim svoj primjer, ali to je zato što neki ljudi nisu upoznati s INPUT_GET, INPUT_POST i INPUT_SERVER u odnosu na filter_input_array ().

    Zaključak je da ne obrađujem POST zahtjeve na svom poslužitelju ako nisu ispunjena sva četiri uvjeta. Stoga, u smislu POST zahtjeva, odbijanje davanja zaglavlja HTTP hosta (prisutnost provjerena za ranije) doom uroke za stroge preglednike HTTP 1.0... Osim toga, traženi host mora odgovarati vrijednosti Ime poslužitelja u httpd.conf, a prema proširenju - vrijednost $ _SERVER ("SERVER_NAME") u nadmaklu $ _SERVER. Opet, koristio bih INPUT_SERVER s funkcijama PHP filtra, ali vi ste mi razbili drift.

    Kao što je naglasio balusC, SERVER_NAME nije pouzdan i može se promijeniti u apache konfiguraciji, konfiguraciji poslužitelja i vatrozidu koji se možda nalazi između vas i poslužitelja.

    Sljedeća funkcija uvijek vraća stvarni host (host upisan od strane korisnika) bez porta, a to je gotovo pouzdano:

    Funkcija getRealHost () (list ($ realHost,) = explode (":", $ _ SERVER ["HTTP_HOST"]); return $ realHost;)

    dijeliti

    Za početak ćemo poboljšati stranicu za registraciju dodavanjem mogućnosti učitavanja avatara. Originalna slika mora biti u jpg, gif ili png formatu. Također, ne smije biti veće od 2 MB. Ne brinite, nakon komprimiranja sa skriptom, avatar će biti veličine oko 3 kb i u jpg formatu. Otvorite stranicu reg.php i dodajte oznaku < oblik> crta enctype = "multipart / form-data" kao u primjeru:


    registracija










    Sada štedimo reg.php

    2. Zatim morate stvoriti drugo polje u tablici korisnika... Ići phpmyadmin, odaberite potrebnu bazu i tablicu.


    Postavljamo sve vrijednosti, kao na slici:

    U ovo polje bit će upisan put do avatara, koji će biti spremljen u zasebnu mapu, nazovimo to "avatari". Mapa će se nalaziti u istom direktoriju kao i ostale datoteke skripte.

    3. Idite na datoteku uštedjeti_ korisnik. php i dodajte sljedeći kôd nakon uklanjanja razmaka iz prijave i lozinke:

    // uklanjanje dodatnih razmaka
    $ login = trim ($ login);

    // dodaj novu *******************************************

    // dodamo provjeru duljine prijave i lozinke
    if (strlen ($ login)< 3 or strlen($login) > 15) {
    exit ("Prijava mora sadržavati najmanje 3 znaka i najviše 15");
    }
    if (strlen ($ lozinka)< 3 or strlen($password) > 15) {
    exit ("Lozinka mora sadržavati najmanje 3 znaka i ne više od 15.");
    }

    if (! empty ($ _ POST ["fupload"])) // provjerite je li korisnik objavio sliku
    {
    $ fupload = $ _ POST ["fupload"]; $ fupload = trim ($ fupload);
    if ($ fupload == "" ili prazno ($ fupload)) (
    unset ($ fupload); // ako je varijabla $ fupload prazna, uklonite je
    }
    }
    if (! isset ($ fupload) ili prazno ($ fupload) ili $ fupload == "")
    {
    // ako varijabla ne postoji (korisnik nije poslao sliku), tada joj dodijelite unaprijed pripremljenu sliku s natpisom "bez avatara"
    $ avatar = "avatari / net-avatara.jpg"; // možete nacrtati net-avatara.jpg ili uzeti izvor
    }
    drugo
    {
    // inače - učitavanje slike korisnika
    $ path_to_90_directory = "avatars /"; // mapa u koju će se učitati početna slika i njezina komprimirana kopija

    If (preg_match (" / [.] (JPG) | (jpg) | (gif) | (GIF) | (png) | (PNG) $ /", $ _ FILES ["fupload"] ["name"]) ) // provjerite format izvorne slike
    {
    $ filename = $ _FILES ["fupload"] ["name"];
    $ source = $ _FILES ["fupload"] ["tmp_name"];
    $ target = $ path_to_90_directory. $ naziv datoteke;
    move_uploaded_file ($ source, $ target); // prenesite izvornik u mapu $ path_to_90_directory
    if (preg_match (" / [.] (GIF) | (gif) $ /", $ naziv datoteke)) (
    $ im = imagecreatefromgif ($ path_to_90_directory. $ filename); // ako je izvornik u gif formatu, tada stvorite sliku u istom formatu. Potrebno za naknadnu kompresiju
    }
    if (preg_match (" / [.] (PNG) | (png) $ /", $ naziv datoteke)) (
    $ im = imagecreatefrompng ($ path_to_90_directory. $ filename); // ako je izvornik bio u PNG formatu, tada stvorite sliku u istom formatu. Potrebno za naknadnu kompresiju
    }

    Ako (preg_match (" / [.] (JPG) | (jpg) | (jpeg) | (JPEG) $ /", $ naziv datoteke)) (
    $ im = imagecreatefromjpeg ($ path_to_90_directory. $ filename); // ako je izvornik bio u jpg formatu, tada stvorite sliku u istom formatu. Potrebno za naknadnu kompresiju
    }
    // STVARANJE KVADRATNE SLIKE I NJIHOVIH SLJEDEĆIH KOMPRESIJA UZIMANIH SA STRANICE www.codenet.ru
    // Stvaranje kvadrata 90x90
    // dest - rezultirajuća slika
    // w - širina slike
    // ratio - omjer
    $ w = 90; // kvadrat 90x90. Mogu se isporučiti i druge veličine.
    // izrada izvorne slike na temelju
    // izvorna datoteka i odrediti njezinu veličinu
    $ w_src = imagesx ($ im); // izračunati širinu
    $ h_src = imagesy ($ im); // izračunati visinu slike
    // stvoriti praznu kvadratnu sliku
    // to je truecolor! to je važno! inače ćemo imati 8-bitni rezultat
    $ dest = imagecreatetruecolor ($ w, $ w);
    // izrezati kvadratni centar na x ako je fotografija vodoravna
    ako ($ w_src> $ h_src)
    imagecopyresampled ($ dest, $ im, 0, 0,
    okrugli ((max ($ w_src, $ h_src) -min ($ w_src, $ h_src)) / 2),
    0, $ w, $ w, min ($ w_src, $ h_src), min ($ w_src, $ h_src));
    // izrezati kvadratni vrh na y,
    // ako je fotografija okomita (iako je moguća i sredina)
    ako ($ w_src<$h_src)
    kopija slikeuzorak ($ ​​dest, $ im, 0, 0, 0, 0, $ w, $ w,
    min ($ w_src, $ h_src), min ($ w_src, $ h_src));
    // kvadratna slika je skalirana bez izrezivanja
    ako ($ w_src == $ h_src)
    imagecopyresampled ($ dest, $ im, 0, 0, 0, 0, $ w, $ w, $ w_src, $ w_src);
    $ datum = vrijeme (); // izračunati trenutno vrijeme.
    imagejpeg ($ dest, $ path_to_90_directory. $ date. ". jpg"); // spremite jpg sliku u željenu mapu, naziv će biti trenutno vrijeme. Napravljeno tako da avatari nemaju isto ime.
    // zašto jpg? Zauzima vrlo malo prostora + animacija gif slike koja ometa korisnika je uništena. Nije baš ugodno čitati njegov komentar kad krajičkom oka primijetite neki pokret.
    $ avatar = $ path_to_90_directory. $ date. ". jpg"; // unesite put do avatara u varijablu.
    $ delfull = $ path_to_90_directory. $ filename;
    unlink ($ delfull); // izbrisati izvornu postavljenu sliku, više nam ne treba. Zadatak je bio nabaviti minijaturu.
    }
    drugo
    {
    // u slučaju neslaganja formata, izdajte odgovarajuću poruku
    exit ("Avatar mora biti u formatu JPG, GIF ili PNG");
    }
    // kraj procesa učitavanja i dodjeljivanje varijable $ avatar adresi učitanog avatara
    }



    // dodao novu *******************************************
    // Zatim slijedi sve iz prvog dijela članka, ali morate dodati izmjenu upita u bazu podataka.
    // povezivanje s bazom podataka
    // provjeriti postojanje korisnika s istim podacima za prijavu
    $ result = mysql_query ("ODABERITE ID OD korisnika WHERE login =" $ login "", $ db);
    if (! prazno ($ myrow ["id"]))) (
    exit ("Žao nam je, korisničko ime koje ste unijeli već je registrirano. Unesite drugo korisničko ime.");
    }
    // ako nije, tada spremite podatke
    $ result2 = mysql_query ("INSERT INTO users (login, password, avatar) VALUES (" $ login "," $ password "," $ avatar ")");
    // Provjerite postoje li pogreške
    ako ($ result2 == "TRUE")
    {
    echo "Uspješno ste se registrirali! Sada možete posjetiti web mjesto. Početna stranica";
    }
    drugo (
    echo "Pogreška! Niste registrirani.";
    }
    ?>

    4. U istu bazu podataka potrebno je dodati jednu tablicu. Pohranit će ip-adrese koje su pogriješile pri unosu. Tako ćemo moći ograničiti pristup onima koji su pogriješili više od tri puta zaredom na 15 minuta.Mislim da će se programi koji pogađaju lozinke morati dugo petljati.
    Idite na phpmyadmin i stvorite novu tablicu s 3 polja:


    ip - ip -adresa.
    date - datum neuspješne prijave u zadnjih 15 minuta za korisnika s datim ip -om. col - broj pogrešaka u zadnjih 15 minuta za korisnika s zadanim ip -om.
    Fino! Gotovo, sada promijenimo datoteku za provjeru prijave i lozinke, jer je sada naša lozinka šifrirana. Otvorite testreg.php i izbrišite sve osim uklanjanja razmaka iz prijave i lozinke. Zatim dodajte sljedeći kôd:

    // uklanjanje dodatnih razmaka
    $ login = trim ($ login);
    $ lozinka = trim ($ lozinka);

    // zamijeniti novim ****************************************
    // povezivanje s bazom podataka
    include ("bd.php"); // bd.php datoteka mora biti u istoj mapi kao i svi ostali, ako nije, tada samo promijenite putanju
    // mini provjera pogađanja lozinke
    $ ip = getenv ("HTTP_X_FORWARDED_FOR");
    if (prazno ($ ip) || $ ip == "nepoznato") ($ ip = getenv ("REMOTE_ADDR");) // dohvati ip
    mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP () - UNIX_TIMESTAMP (date)> 900"); // brisanje ip -adresa korisnika koji su se prijavili pogreškom nakon 15 minuta.
    $ result = mysql_query ("SELECT col FROM oshibka WHERE ip =" $ ip "", $ db); // iz baze podataka dohvatimo broj neuspješnih pokušaja prijave za zadnjih 15 korisnika s datim ip
    $ myrow = mysql_fetch_array ($ rezultat);
    if ($ myrow ["col"]> 2) (
    // ako postoje više od dvije pogreške, tj. tri, tada izdajte poruku.
    exit ("3 puta ste pogrešno upisali svoju prijavu ili lozinku. Pričekajte 15 minuta prije sljedećeg pokušaja.");
    }
    $ password = md5 ($ password); // šifriranje lozinke
    $ password = strrev ($ password); // radi sigurnosti dodajte rikverc
    $ lozinka = $ lozinka. "b3p6f";
    // možete dodati nekoliko svojih znakova po želji, na primjer, upisivanjem "b3p6f". Ako se ova lozinka razbije metodom brute-force na njihovom vlastitom poslužitelju s istim md5, onda očito neće biti ništa dobro. Ali savjetujem vam da stavite druge znakove, možete na početak retka ili u sredinu.
    // U ovom slučaju potrebno je povećati duljinu polja lozinke u bazi podataka. Šifrirana lozinka može biti mnogo veća.

    $ result = mysql_query ("SELECT * FROM users WHERE login =" $ login "AND password =" $ password "", $ db); // dohvatiti iz baze sve podatke o korisniku s upisanim korisničkim imenom i lozinkom
    $ myrow = mysql_fetch_array ($ rezultat);
    if (prazno ($ myrow ["id"]))
    {
    // ako korisnik s upisanim korisničkim imenom i lozinkom ne postoji
    // Zabilježite da zadani ip nije mogao unijeti.
    $ select = mysql_query ("SELECT ip FROM oshibka WHERE ip =" $ ip "");
    $ tmp = mysql_fetch_row ($ select);
    if ($ ip == $ tmp) (// provjerite je li korisnik u tablici "oshibka"
    $ result52 = mysql_query ("SELECT col FROM oshibka WHERE ip =" $ ip "", $ db);
    $ myrow52 = mysql_fetch_array ($ rezultat52);
    $ col = $ myrow52 + 1; // dodajte još jedan neuspjeli pokušaj prijave
    mysql_query ("UPDATE oshibka SET col = $ col, date = NOW () WHERE ip =" $ ip ""));
    }
    drugo (
    mysql_query ("INSERT INTO oshibka (ip, date, col) VALUES (" $ ip ", NOW ()," 1 ")");
    // ako u posljednjih 15 minuta nije bilo pogrešaka, umetnite novi zapis u tablicu "oshibka"
    }

    exit ("Žao nam je, korisničko ime ili lozinka koje ste unijeli nisu točni.");
    }
    drugo (
    nbsp; // ako se lozinke podudaraju, započinjemo sesiju za korisnika! Možete mu čestitati, ušao je!
    $ _SESSION ["lozinka"] = $ myrow ["lozinka"];
    $ _SESSION ["login"] = $ myrow ["login"];
    $ _SESSION ["id"] = $ myrow ["id"]; // ti se podaci vrlo često koriste, pa će prijavljeni korisnik "nositi sa sobom"

    // Zatim se sjećamo podataka u kolačićima radi kasnije prijave.
    //PAŽNJA!!! UČINITE TO NA VAŠ OGLAS, KAKO SE PODACI SKLADUJU U KOLAČIĆIMA BEZ KODIRANJA
    if ($ _POST ["save"] == 1) (
    // Ako korisnik želi da se njegovi podaci spreme za sljedeću prijavu, spremamo ih u kolačiće svog preglednika
    setcookie ("prijava", $ _POST ["prijava"], vrijeme () + 9999999);
    setcookie ("lozinka", $ _POST ["lozinka"], time () + 9999999);
    }}
    jeka " "; // preusmjeriti korisnika na glavnu stranicu, tamo će biti obaviješten o uspješnoj prijavi
    ?>

    5. Potpuno promijenite glavnu stranicu. Na njemu je potrebno prikazati avatar korisnika, prikazati vezu za odjavu s računa te dodati potvrdni okvir kako bi zapamtili lozinku prilikom prijave.
    Index.php

    // cijeli postupak radi na sjednicama. U njemu se pohranjuju podaci korisnika dok se nalazi na web mjestu. Vrlo je važno pokrenuti ih na samom početku stranice !!!
    session_start ();
    include ("bd.php"); // bd.php datoteka mora biti u istoj mapi kao i svi ostali, ako nije, tada samo promijenite putanju
    if (! prazno ($ _ SESSION ["prijava"]) i! prazno ($ _ SESSION ["lozinka"]))
    {
    // ako postoje prijava i lozinka u sesijama, tada ih provjeravamo i dohvaćamo avatar
    $ login = $ _SESSION ["prijava"];
    $ lozinka = $ _SESSION ["lozinka"];
    $ result = mysql_query ("SELECT id, avatar FROM users WHERE login =" $ login "AND password =" $ password "", $ db);
    $ myrow = mysql_fetch_array ($ rezultat);
    // dohvaćanje potrebnih korisničkih podataka
    }
    ?>


    Početna stranica


    Početna stranica

    if (! isset ($ myrow ["avatar"]) ili $ myrow ["avatar"] == "") (
    // provjeravamo jesu li korisnički podaci dohvaćeni iz baze podataka. Ako nije, onda nije unio ili je lozinka u sesiji netočna. Prikazujemo prozor za prijavu. Ali nećemo ga prikazivati ​​onima koji su ušli, više im ne treba.
    ispisati<<


    OVDJE;

    If (isset ($ _ COOKIE ["login"])) // postoji li varijabla s prijavom u COOKIE. Trebalo bi biti ako je korisnik pri prethodnoj prijavi kliknuo potvrdni okvir "Zapamti me"
    {
    // ako da, tada umetnite njegovu vrijednost u obrazac. U tom slučaju korisniku se prikazuje da je njegova prijava već unijeta u traženi stupac
    echo "value =" ". $ _ COOKIE [" login "]." ">";
    }

    ispisati<<




    OVDJE;

    If (isset ($ _ COOKIE ["lozinka"])) // postoji li varijabla s lozinkom u COOKIE. Trebalo bi biti ako je korisnik pri prethodnoj prijavi kliknuo potvrdni okvir "Zapamti me"
    {
    // ako da, tada umetnite njegovu vrijednost u obrazac. U tom slučaju korisniku se prikazuje da je njegova lozinka već unijeta u traženi stupac
    echo "value =" ". $ _ COOKIE [" lozinka "]." ">";
    }

    Ispis<<



    Zapamti me.






    Registriraj se



    Prijavljeni ste kao gost

    OVDJE;
    }
    drugo
    {
    // nakon uspješne prijave korisniku se daje sve ispod između zvjezdica.

    ispisati<<
    Prijavljeni ste na web mjesto kao $ _SESSION (odjava)


    Ova je veza dostupna samo registriranim korisnicima

    Tvoj avatar:




    OVDJE;

    //************************************************************************************
    // nakon uspješne prijave, korisniku se daje sve iznad zvjezdica.
    }
    ?>



    6. Potrebno je omogućiti odjavu s računa korisnicima koji su prijavljeni. Na glavnoj stranici već je postojala izlazna veza. Ali ova datoteka još ne postoji. Pa napravimo novu datoteku izlaz.php s kodom:

    session_start ();
    if (prazno ($ _ SESSION ["login"]) ili prazno ($ _ SESSION ["lozinka"]))
    {
    // ako nema sesije s korisničkim imenom i lozinkom, tada je otključani korisnik došao do ove datoteke. On ne pripada ovdje. Izdajemo poruku o pogrešci, zaustavljamo skriptu
    exit ("Pristup ovoj stranici dopušten je samo registriranim korisnicima. Ako ste registrirani, unesite web mjesto koristeći svoje korisničko ime i lozinku
    Početna stranica ");
    }

    unset ($ _ SESSION ["lozinka"]);
    unset ($ _ SESSION ["login"]);
    unset ($ _ SESSION ["id"]); // uništavanje varijabli u sesijama
    Izlaz (" ");
    // šalje korisnika na glavnu stranicu.
    ?>

    Dakle, to je sve! Iskoristite ga za svoje zdravlje! Sretno!