Računalniki Windows Internet

Kakšna je razlika med HTTP_HOST in SERVER_NAME v PHP? PHP $ _SERVER Spremenljivka okolja za globalno pridobivanje matrike HTTP_X_FORWARDED_FOR

$ _SERVER je eden najpomembnejših vnaprej določenih nizov v PHP. Vsebuje spremenljivke, ki jih je od strežnika prejel tolmač PHP. Te spremenljivke so uporabljali vsi ali jih bodo zagotovo uporabili, saj je brez njih precej težko organizirati popolno podporo za spletne aplikacije.

V svojem članku predlagam tabelo z glavnimi spremenljivkami superglobalnega niza $ _SERVER. Tabela je podobna tisti, ki je narejena za funkcije niza PHP.

Če si želite ogledati vse elemente matrike $ _SERVER, morate: a) poklicati funkcijo print_r (), ki bo matriko natisnila; b) bodisi pokličite funkcijo phpinfo (), ki bo prikazala podatke o tolmaču PHP.

Na kratko o $ HTTP_SERVER_VARS

Superglobalni niz $ _SERVER nadomešča matriko $ HTTP_SERVER_VARS v PHP 4.1.0. $ HTTP_SERVER_VARS zdaj se ne uporablja, vendar je vredno vedeti o tem. Prvič, stara različica ni bila avtoglobalna. Druga razlika je v tem, da nekateri elementi niza $ _SERVER ne obstajajo v $ HTTP_SERVER_VARS, čeprav so v večini primerov njihove spremenljivke enake.

Element

Kratek opis

Primer

$ _SERVER ["DOCUMENT_ROOT"]

Vsebuje pot do korenskega imenika strežnika.

$ _SERVER ["HTTP_HOST"]

$ _SERVER ["SERVER_NAME"]

$ _SERVER ["SCRIPT_FILENAME"]

Vsebuje ime skripta, začenši od korenskega imenika navideznega gostitelja.

C: \ mapa \ index.php

/www/folder/index.php

$ _SERVER ["PHP_SELF"]

$ _SERVER ["SCRIPT_NAME"]

Vsebuje ime skripta.

$ _SERVER ["REQUEST_URI"]

Vsebuje ime skripta, ki se začne od korenskega imenika gostitelja podjetja, in parametre, ki so mu posredovani z metodo GET.

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

$ _SERVER ["QUERY_STRING"]

Vsebuje parametre, posredovane skriptu z metodo GET.

Za naslov

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

bo izpisan

$ _SERVER ["REQUEST_METHOD"]

Vsebuje metodo zahteve, ki se uporablja za priklic skripta.

DOBI ali POST

$ _SERVER ["HTTP_REFERER"]

Vsebuje naslov strani, s katere je prišel obiskovalec.

http://yandex.ru/yandsearch

$ _SERVER ["HTTP_USER_AGENT"]

Vsebuje vrsto in različico brskalnika in operacijskega sistema obiskovalca. Prav tako lahko zazna iskalne robote in blagovno znamko mobilnega telefona. Spodaj je primerjava blagovne znamke telefona in njegove šifre v nizu.

Nokia - NOKIJA; Sony Ericsson - ERICSSON ali SONYERICSSON; Samsung - SAMSUNG ali SEC-; Motorola - MOT; LG - LG ali LG-; Alcatel - ALCATEL; Panasonic - PANASONIC; Sagem - SAGEM; Pantech - PANTECH; Siemens - SIE; BenQ - BENQ; NEC - NEC; Sharp - SHARP.

Mozilla / 4.0 (združljivo; MSIE 6.0; Windows NT 5.1) ( IE 6inWindows XP)

Mozilla / 4.0 (združljivo; MSIE 7.0; Windows NT 5.0) Opera 9.50 ( Opera 9.5inWindows 2000)

$ _SERVER ["REMOTE_ADDR"]

Vsebuje odjemalčev naslov IP.

$ _SERVER ["SERVER_ADDR"]

Vsebuje naslov IP strežnika.

$ _SERVER ["HTTP_ACCEPT"]

Opisuje strankine želje glede vrste dokumenta. Vsebina tega elementa je pridobljena iz glave Accept HTTP, ki jo odjemalec posreduje strežniku.

Izhodni format: MIME-tip [[; q], druga vrsta MIME [; q] ...]

Prednostnih vrst MIME je lahko več, nato pa so ločene z vejicami. * se uporablja za nastavitev predloge, združevanja. q - prednostni koeficient, privzeto 1, se giblje od 0 do 1.

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

image / *; q = 0,5, slika / jpeg (raje zpeg pred vsemi drugimi oblikami)

$ _SERVER ["HTTP_ACCEPT_LANGUAGE"]

Podobno kot prejšnji element, vendar povezano z jezikovnimi nastavitvami. Uporablja se lahko za določanje narodnosti obiskovalcev. Ocena pa bo približna, saj nekateri radi uporabljajo angleške različice brskalnikov

ru, en; q = 0,9 (prednost za ruščino, če pa je ni - in bo ustrezala angleščina)

$ _SERVER ["HTTP_ACCEPT_CHARSET"]

Podobno kot pri prejšnjih. Vsebuje glavo Accept-Charset

$ _SERVER ["HTTP_ACCEPT_ENCODING"]

Podobno kot pri prejšnjih. Vsebuje glavo Accept-Encoding

$ _SERVER ["SERVER_PORT"]

Vsebuje vrata za poslušanje strežnika.

$ _SERVER ["SERVER_SOFTWARE"]

Vsebuje podatke o spletnem strežniku.

Apache / 2.2.4 (Win32)

$ _SERVER ["SERVER_PROTOCOL"]

Vsebuje različico protokola HTTP.

$ _SERVER ["GATEWAY_INTERFACE"]

Vsebuje različico CGI, ki jo uporablja spletni strežnik.

$ _SERVER ["REQUEST_TIME"]

Začetni čas zahteve spletne strani v formatu UNIX. Na voljo od PHP 5.1.0

Celoten naslov strani s parametri:

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

Tabelo z vsemi funkcijami lahko prenesete s povezave v formatu * .doc.

Bodite posebno pozorni na spremenljivko $ _SERVER ["REQUEST_URI"] in je ne pozabite preveriti! Bistvo je, da njegova uporaba morda ni posebej varna. Na primer, na vašem spletnem mestu se s tem parametrom ustvarijo nekateri URL -ji. Nato lahko v vrstico brskalnika napišete povezavo http://site.com/index.php? ”>... To bo odprlo okno, ki prikazuje vsebino datoteke piškotka. Ta primer je neškodljiv, vendar je luknja, skozi katero lahko heker izkoristi kršitev, na primer za krajo podatkov od drugega uporabnika. Zato preverite, ali ima spremenljivka neveljavne znake, zlasti> in<.

Za danes morda vse. Do naslednjič in lep vikend!

JavaScript je v vašem brskalniku blokiran. Če želite, da spletno mesto deluje, omogočite JavaScript!

Superglobalni niz $ _SERVER

V niz $ _SERVER Tolmač PHP vstavi spremenljivke, prejete od strežnika. Brez teh spremenljivk je težko zagotoviti popolno podporo za spletne aplikacije. Sledi opis najpomembnejših elementov superglobalnega niza $ _SERVER.

Komentiraj

  • Oglejte si celoten seznam elementov matrike $ _SERVER
  • lahko uporabite funkcijo print_r (), ki natisne izpis matrike, ali funkcijo phpinfo (), ki natisne podatke o tolmaču PHP.

    Polje (=> vklopljeno => 200 => vklopljeno => htmlweb.ru => https => 443 => blizu => Mozilla /5.0 (združljivo; 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ščiteno po e -pošti]=>. php => 35242 => /php/function/$_server.php => CGI /1.1 => HTTP /1.0 => GET => => /php/function/%24_server.php => /index.php => /index.php => 1560059525.711 => 1560059525) 1

    $ _SERVER [" DOCUMENT_ROOT"]

    Element $ _SERVER ["DOCUMENT_ROOT"] vsebuje pot do korenskega imenika strežnika. Če se skript izvede v navideznem gostitelju, ta element vsebuje pot do korenskega imenika navideznega gostitelja. Tisti. v konfiguracijski datoteki httpd.conf ima navidezni gostitelj direktivo DocumentRoot, ki ji je dodeljena vrednost "D: / main", element $ _SERVER ["DOCUMENT_ROOT"] bo vseboval vrednost "D: main".

    $ _SERVER [" REMOTE_ADDR"]

    Element $ _SERVER ["REMOTE_ADDR"] vsebuje naslov IP odjemalca. Pri testiranju na lokalnem računalniku bo ta naslov 127.0.0.1. Pri preskušanju v omrežju pa bo spremenljivka vrnila naslov IP odjemalca ali zadnji strežnik proxy, prek katerega je odjemalec prišel do strežnika. Če odjemalec uporablja proxy strežnik, lahko njegov IP naslov ugotovite s spremenljivko okolja HTTP_X_FORWARDED_FOR, katere vrednost lahko dobite s funkcijo getenv ().

    Komentiraj

    Proxy strežniki so posebni vmesni strežniki, ki ponujajo posebno vrsto storitev: stiskanje prometa, šifriranje podatkov, prilagoditev za mobilne naprave itd. Med številnimi proxy strežniki se razlikujejo tako imenovani anonimni proxy strežniki, ki vam omogočajo, da skrijete pravi IP naslov odjemalca; takšni strežniki ne vrnejo spremenljivke okolja HTTP_X_FORWARDED_FOR.

    Izvlečenje spremenljivke okolja HTTP_X_FORWARDED_FOR

    echo @getenv (HTTP_X_FORWARDED_FOR);

    $ _SERVER [" SCRIPT_FILENAME"]

    Element $ _SERVER ["SCRIPT_FILENAME"] vsebuje absolutno pot do datoteke iz korena diska. Torej, če strežnik deluje pod operacijskim sistemom Windows, potem lahko ta pot izgleda tako "d: main estindex.php", tj. pot je podana z diska, v operacijskem sistemu, podobnem UNIX-u, je pot podana iz korenskega imenika/, na primer, "/var/share/www/test/index.php".

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

    $ _SERVER [" SERVER_NAME"]

    Element $ _SERVER ["SERVER_NAME"] vsebuje ime strežnika, praviloma enako imenu domene spletnega mesta, ki se nahaja na njem. Na primer,

    Vsebina elementa $ _SERVER ["SERVER_NAME"] je pogosto enaka vsebini elementa $ _SERVER ["HTTP_HOST"]. Poleg imena strežnika vam superglobalna matrika $ _SERVER omogoča, da ugotovite številne parametre strežnika, na primer naslov IP strežnika, vrata za poslušanje, kateri spletni strežnik je nameščen in različico protokola HTTP . Ti podatki so shranjeni v $ _SERVER ["SERVER_ADDR"], $ _SERVER ["SERVER_PORT"], $ _SERVER ["SERVER_SOFTWARE"] in $ _SERVER ["SERVER_PROTOCOL"]). Spodaj je primer uporabe teh elementov.

    Uporaba elementov matrike $ _SERVER

    echo "Ime strežnika je". $ _ SERVER ["SERVER_NAME"]. "
    "; echo" IP strežnika je ". $ _ SERVER [" SERVER_ADDR "]."
    "; echo" Strežniška vrata so ". $ _ SERVER [" SERVER_PORT "]."
    "; echo" Spletni strežnik - ". $ _ SERVER [" SERVER_SOFTWARE "]."
    "; echo" Različica protokola HTTP - ". $ _ SERVER [" SERVER_PROTOCOL "]."
    ";

    Ime strežnika - spletno mesto
    IP strežnika - 185.12.92.137
    Strežniška vrata - 80
    Spletni strežnik-Apache / 2.4.25 (Debian) mpm-itk / 2.4.7-04 OpenSSL / 1.0.2l
    Različica protokola HTTP - HTTP / 1.0

    $ _SERVER [" REQUEST_METHOD"]

    Element $ _SERVER ["REQUEST_METHOD"] vsebuje metodo zahteve, ki se uporablja za klicanje skripta: GET ali POST.

    Odmev $ _SERVER ["REQUEST_METHOD"];

    $ _SERVER [" QUERY_STRING"]

    Element $ _SERVER ["QUERY_STRING"] vsebuje parametre, posredovane skriptu, če je niz poizvedbe naslov

    Ko se na primer nanašate na:
    element $ _SERVER ["QUERY_STRING"] bo vseboval vse besedilo za znakom "?":

    Odmev $ _SERVER ["QUERY_STRING"];

    id = 1 & test = mokro & id_theme = 512

    $ _SERVER [" PHP_SELF"]

    Element $ _SERVER ["PHP_SELF"] vsebuje ime skripta, začenši od korenskega imenika navideznega gostitelja, tj. če je niz poizvedbe naslov http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 potem bo element $ _SERVER ["PHP_SELF"] vseboval delček "/test/index.php"... Običajno je isti fragment postavljen v element $ _SERVER ["SCRIPT_NAME"].

    $ _SERVER [" REQUEST_URI"]

    Element $ _SERVER ["REQUEST_URI"] vsebuje ime skripta, ki se začne od korenskega imenika navideznega gostitelja in parametre, tj. če je niz poizvedbe naslov: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 potem bo element $ _SERVER ["REQUEST_URI"] vseboval delček "/test/index.php?id=1&test=wet&id_theme=512"... Za obnovitev celotnega naslova v skriptu, ki je postavljen v vrstico poizvedbe, je dovolj, da uporabite kombinacijo elementov matrike $ _SERVER, predstavljeno spodaj

    Celoten naslov skripta

    echo "http: //". $ _ SERVER ["SERVER_NAME"]. $ _ SERVER ["REQUEST_URI"];
    • Prevajanje
    • Vadnica

    Ena najbolj kul novih funkcij v php 5.4 je vgrajen strežnik, zgrajen posebej za razvoj in testiranje. Zdaj lahko kodo napišete in preizkusite brez polnega spletnega strežnika - samo zaženite vdelani strežnik, preizkusite svojo kodo in jo končajte, ko končate.
    Strežnik ponuja tudi priložnost za ustvarjalno uporabo. Na primer, prenosno spletno aplikacijo lahko distribuirate na CD -ju ali USB -ju ali celo kot namizno aplikacijo, vgrajeno v PHP, brez uporabe GTK -ja ali drugih grafičnih knjižnic.

    Priročnik PHP poudarja, da je vgrajen strežnik namenjen razvoju in ga priporočamo, da ga ne uporabljate na strežniku za proizvodnjo. Za strežnik niso odgovorne direktive INI (razen obarvanja izhoda v konzoli) in zdi se, da je glavna ideja dokumentacije: "zdaj imamo tudi spletni strežnik, pustite nas pri miru."
    Ne glede na to menim, da je vgrajen strežnik lahko dragoceno orodje za razvoj in testiranje. Na svojem računalniku na primer uporabljam vnaprej nameščen Apache s konfiguracijo po meri, ki mi ustreza, včasih pa želim preizkusiti nekaj novih spletnih aplikacij. Z vgrajenim spletnim strežnikom lahko aplikacijo preizkusim neposredno iz mape za prenos ali začasne mape in jo premaknem v običajno okolje le po potrebi.
    Za začetek pa to ni tako enostavno, saj številne pisne aplikacije uporabljajo .htaccess in mod_rewrite. Prepričan pa sem, da bo nekdo (morda eden od vas, zakaj ne?) Za to napisal adapter, jaz pa bi ga rad prvi preizkusil.
    V tem članku bom razložil nekaj osnovnih primerov uporabe vdelanega strežnika in vam pokazal, kako ga narediti uporabnega za razvoj in testiranje.

    Uporabljamo vgrajen strežnik

    Za uporabo strežnika potrebujemo php 5.4 ali novejši. Če želite preveriti različico PHP, zaženite:
    php -v
    Ali je strežnik na voljo v sestavi, lahko ugotovite tudi tako, da zaženete:
    php -h
    in tam poiščite opis možnosti "-S" in "-t", ki se uporabljajo samo za strežnik.
    Če želite preveriti strežnik, lahko v trenutnem imeniku ustvarite datoteko index.php, ki bo vsebovala klic funkcije phpinfo () in nato zagnala strežnik:
    $ php -S 127.0.0.1:8080 Razvojni strežnik PHP 5.4.0RC7 se je začel v pet, 26. februar 18:49:29 2012 Poslušanje na 127.0.0.1:8080 Koren dokumenta je / home / ec2-user Pritisnite Ctrl-C za izhod.
    Zdaj lahko vidite vsebino, ki jo ponuja vgrajeni spletni strežnik:

    Vsaka zahteva odjemalca bo zapisana v konzolo:
    80.180.55.37:36318 : / 80.180.55.37:36584 : /
    Če se vrnemo, poglejmo parameter ukazne vrstice "-S", s katerim določimo naslov, s katerega bo strežnik dostopen. Možne vrednosti:
    lokalni gostitelj- do strežnika bo dostopen samo z lokalnega računalnika,
    0.0.0.0 - na katerem koli vmesniku stroja,
    Vsak zunanji ali siv IP- samo na določenem IP -ju
    Možnost -t nastavi podani koren imenika. Na primer:
    $ php -S : 8090 -t / home / ec2 -user / public
    Poleg tega ,. lahko določite ime določene datoteke usmerjevalnika. Na primer:
    $ php -S> localhost ali vaš javni IP>: 8080 -t / home / ec2 -user / public public / index.php
    Izhod tega usmerjevalnika bo razčlenil in izvedel strežnik. Preprost primer:
    Dobrodošli v PHP

    ";
    Če skript vrne vrednost FALSE, bo strežnik obdelal zahtevani URI, ki bo izdal zahtevani vir, ali pa bo vrnil napako 404. Če skript vrne karkoli drugega, se izhod skripta posreduje odjemalcu.
    Čeprav nam ta pristop daje večji nadzor, morate vedeti nekaj stvari. Prvič, strežnik PHP pošlje le minimalen nabor naslovov HTTP:
    Povezava: zaprta Vrsta vsebine: besedilo / html Gostitelj: aws-dev-01.vtardia.com X-Powered-By: PHP / 5.4.0RC7 D
    Primerjajte to z glavami, ki jih vrne strežnik Apache:
    Sprejemljivi obsegi: bajti Povezava: Keep-Alive Dolžina vsebine: 631 Vrsta vsebine: besedilo / html Datum: Sat, 04. februar 2012 18:24:42 GMT Etag: "bbb99-277-4ace8c5470a40" Keep-Alive: timeout = 15, max = 100 Zadnja sprememba: sreda, 14. september 2011 15:54:09 GMT Strežnik: Apache / 2.2.21 (Unix) DAV / 2
    Če vaša aplikacija uporablja glave, mora upoštevati razlike v razvojnem in proizvodnem okolju.
    Drugič, vgrajeni strežnik ima drugačen SAPI (API strežnika). Tako lahko z usmerjanjem v indeksu, php določite klic skripta na preskusnem ali produkcijskem strežniku. php_sapi_name () bo vrnil "cli-server" na vdelanem strežniku:
    Obstaja ena posebna direktiva INI, imenovana "cli_server.color". Ta direktiva vrne barvni izhod na konzolo. Ustvarite prazno datoteko z imenom cli-server.ini in vstavi to vrstico:
    cli_server.color = vklopljeno
    Za strežnik lahko ustvarite edinstveno konfiguracijo okolja, tako da v datoteki INI podate potrebne direktive. Neprijavljene direktive bodo sprejele privzete vrednosti. Zdaj smo razglasili samo eno direktivo - cli_server.color.
    Zaženite strežnik s parametrom "-c", ki določa datoteko INI:
    $ php -S localhost -c cli -server.ini
    Če vaš terminal podpira barve, bi morali videti "barvni" izhod v konzoli. Status 200 bo označen z zeleno, 404 z oranžno, napake v skriptu pa z rdečo.

    Ustvarjamo osebni strežnik

    Zdaj, ko veste vse, kar morate vedeti o vgrajenem strežniku, naredimo nekaj kul. Ustvarimo svoj prenosni strežnik!
    Začel bom z naslednjo strukturo naše aplikacije:

    Mapa knjižnice vsebuje kodo aplikacije, javna je korenski imenik, vsebuje index.php in nekaj statičnih datotek. Ta vadnica se bo osredotočila na mapo "strežnik", zato bo naša aplikacija sestavljena iz preprostega "Hello Word!" in nekaj slik in css.
    Naš cilj je, da lahko z enim ukazom zaženemo strežnik iz imenika aplikacij, naš strežnik pa bo poskrbel za usmerjanje, glave HTTP in napake.
    $ ./start.sh
    Oglejmo si zagonski skript:
    #! /bin /bash INIFILE = "$ (pwd) /server/server.ini" DOCROOT = "$ (pwd) /public" ROUTER = "$ (pwd) /server/router.php" HOST = 0.0.0.0 PORT = 8080 PHP = $ (kateri php), če [$? ! = 0]; nato odmev "Ni mogoče najti PHP" izhod 1 fi $ PHP -S $ HOST: $ PORT -c $ INIFILE -t $ DOCROOT $ ROUTER
    Predvidevam, da se skript izvaja iz imenika aplikacij, zato so INIFILE, DOCROOT, ROUTER definirani z uporabo pwd. Pot do php je določena z ukazom kateri. Če php ni bil najden v uporabnikovem $ PATH, potem skript ne uspe z napako.
    To deluje dovolj dobro, vendar uporabniku dajmo možnost, da spremeni kateri koli od danih parametrov iz ukazne vrstice, na primer:
    če [! -z $ INIFILE]; potem INIFILE = "$ (pwd) /server/server.ini" fi
    Nadaljevanje mape "napake" vsebuje datoteke za sporočila o napakah HTTP. Tu je primer napake 403: čeprav sem uporabljal samo HTML, bo skript vključen, jaz pa ga uporabljam vključujejo zato lahko uporabite katero koli kodo php:
    403

    403 Prepovedano

    Žal zahtevani vir ni dostopen.



    Zdaj pa poglejmo router.php. Naloga te datoteke je sprejemati in upravljati vse zahteve ter jih prenesti na strežnik le, če ta datoteka obstaja. Vse strani z napakami se prikažejo s povezavo predloge.
    V prvih vrsticah definiram nekatere globalne parametre, na primer DIRECTORY_INDEX, imenik s predlogami napak. Parameter date_default_timezone_set () se mora ujemati z nastavitvami OS, sicer bodo prišlo do nedoslednosti med vnosi v dnevnik in na strežnik. Dodal sem tudi seznam dovoljenih naslovov IP za izboljšanje varnosti.
    Funkcija logAccess () je potrebna, ker ko usmerjevalni skript sprejme zahtevo, se dnevnik strežnika privzeto prezre. Funkcija sprejema le kodo stanja, izhodna oblika pa je popolnoma skladna s strežniško obliko.
    Naša prva naloga je preveriti varnost. Če odjemalčev IP ni v polju dovoljenih IP -jev, prikažite sporočilo o napaki in zapustite skript. Vnesti moramo kodo stanja, ki ni 200 in funkcija header () tukaj ne bo delovala, zato uporabljamo novo funkcijo - http_response_code.
    Če je IP odjemalca v nizu dovoljenih IP -jev, je naslednji korak, da dobimo zahtevano pot in pripono datoteke. Če je razširitev prazna, predpostavljamo, da uporabnik zahteva mapo in sestavi pot z uporabo DIRECTORY_INDEX, ki je najprej definirana.
    Nazadnje, če zahtevana datoteka obstaja, vrnite FALSE in dovolite strežniku dostop do datoteke. Če ne, se prikaže sporočilo o napaki 404.

    Povzetek

    To je vse. Kot lahko vidite, je strežnik php enostaven za uporabo. Naš osebni strežnik je zelo preprost. Kodo je mogoče optimizirati in vključiti v bolj zapletene in funkcionalne razrede. Veselo kodiranje!

    p.s. Z veseljem bom sprejel kritike in komentarje na prevod v osebno.

    To je odjemalec pravzaprav uporabil kot "ciljnega gostitelja" zahteve. SERVER_NAME je definiran v konfiguraciji strežnika. Kateri je odvisen od tega, za kaj ga potrebujete. Zdaj bi morali razumeti, da je to vrednost, ki jo nadzoruje odjemalec, zato ne more biti zanesljiva za uporabo v poslovni logiki, druga pa je vrednost, ki jo upravlja strežnik, ki je bolj zanesljiva. Vendar se morate prepričati, da ima spletni strežnik pravilno konfiguracijo SERVER_NAME. Če vzamemo za primer Apache HTTPD, je tukaj odlomek iz njegove dokumentacije:

    Če ime strežnika ni podano, strežnik poskuša ugotoviti ime gostitelja z obratno iskanje naslova IP. Če v imenu strežnika niso podana nobena vrata, bo strežnik uporabil vrata iz dohodne zahteve. Za optimalno zanesljivost in predvidljivost morate s pomočjo direktive ServerName podati izrecno ime gostitelja in vrata.

    Osveži: po preverjanju Pekkinega odgovora na vaše vprašanje, ki vsebuje povezavo do bobincevega odgovora, da bo PHP vedno vrnil vrednost HTTP_HOST za SERVER_NAME, kar je v nasprotju z mojimi lastnimi izkušnjami PHP 4.x + Apache HTTPD 1.2.x izpred nekaj let, Odpihnil sem prah s svojega trenutnega XAMPP v operacijskem sistemu Windows XP (Apache HTTPD 2.2.1 s PHP 5.2.8), ga zagnal, ustvaril stran PHP, ki natisne obe vrednosti, ustvaril testno aplikacijo Java z uporabo URLConnection za spremembo glave gostitelja, in testi so me naučili, da je res (napačno) tako.

    Po prvem sumu na PHP in kopanju v nekatere Poročanje o napakah PHP na to temo sem ugotovil, da je koren problema v uporabljenem spletnem strežniku, da ni pravilno vrnil glave gostitelja HTTP, ko je bil zahtevan SERVER_NAME. Tako sem se poglobil Poročanje o napakah HTTPD Apache z uporabo različne ključne besede glede teme in končno sem našel sorodno napako. To vedenje je bilo uvedeno okoli Apache HTTPD 1.3. V vnosu morate vklopiti direktivo UseCanonicalName ServerName v httpd.conf (preverite tudi opozorilo na dnu dokumenta!).

    ServerName example.com UseCanonicalName vklopljeno

    To mi je uspelo.

    Na splošno je SERVER_NAME bolj zanesljiv, vendar vi odvisni v konfiguraciji strežnika!

    HTTP_HOST je ciljni gostitelj, ki ga pošlje odjemalec. Uporabnik lahko prosto manipulira z uporabnikom. Na vašo spletno stran ni treba poslati zahteve z zahtevo HTTP_HOST za vrednost www.stackoverflow.com.

    SERVER_NAME izhaja iz definicije strežnika VirtualHost in zato velja za bolj zanesljivega. Z njim lahko tudi upravljate od zunaj pod določenimi pogoji, povezanimi z nastavitvijo vašega spletnega strežnika. Poglej to To SO vprašanje ki obravnava varnostne vidike obeh možnosti.

    Ni vam treba zanašati, da ste varni. Katerega boste uporabili, je res odvisno od tega, kaj želite narediti. Če želite ugotoviti, na kateri domeni se skript izvaja, lahko varno uporabite HTTP_HOST, dokler neveljavne vrednosti, ki prihajajo od napadalca, ne morejo ničesar prekiniti.

    Upoštevajte, da če želite uporabljati IPv6, verjetno želite uporabiti HTTP_HOST in ne SERVER_NAME. Če vnesete http: // [:: 1] /, so spremenljivke okolja naslednje:

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

    To pomeni, da bi na primer, če naredite mod_rewrite, lahko dobili slab rezultat. Primer preusmeritve SSL:

    # SERVER_NAME NE bo deloval - preusmeritev na https: // :: 1 / RewriteRule. * Https: //% (SERVER_NAME) / # HTTP_HOST bo deloval - preusmeritev na https: // [:: 1] / RewriteRule. * Https: //% (HTTP_HOST) /

    To velja SAMO, če dostopate do strežnika brez imena gostitelja.

    če želite preveriti prek server.php ali kaj želite poklicati z naslednjim:

    Nato dostopajte do vseh veljavnih URL -jev vašega spletnega mesta in preverite razliko.

    Trajalo je nekaj časa, da sem ugotovil, kaj ljudje mislijo z izrazom "SERVER_NAME bolj zanesljiv". Uporabljam strežnik v skupni rabi in nimam dostopa do direktiv navideznega gostitelja. Torej, uporabljam mod_rewrite v .htaccess za preslikavo različnih HTTP_HOST v različnih imenikih. V tem primeru je ta vrednost HTTP_HOST smiselna.

    Podobno je, če uporabljate navidezne gostitelje, ki temeljijo na imenih: direktiva ServerName znotraj navideznega gostitelja preprosto pove, katero ime gostitelja bo preslikano v tega navideznega gostitelja. Bistvo je, da se mora v obeh primerih ime gostitelja, ki ga posreduje odjemalec med zahtevo (HTTP_HOST), ujemati z imenom na strežniku, ki se sam preslika v imenik. Ne glede na to, ali je preslikava izvedena s smernicami navideznega gostitelja ali s pravili htaccess mod_rewrite, je tu drugotnega pomena. V teh primerih bo HTTP_HOST enak SERVER_NAME. Vesel sem, da je Apache tako konfiguriran.

    Vendar se situacija razlikuje od virtualnih gostiteljev, ki temeljijo na IP. V tem primeru in samo v tem primeru sta lahko SERVER_NAME in HTTP_HOST drugačna, ker zdaj odjemalec izbere strežnik po IP -ju, ne po imenu. Dejansko lahko obstajajo posebne konfiguracije, kjer je to pomembno.

    Zato bom odslej uporabljal SERVER_NAME, če bo moja koda potisnjena v te posebne konfiguracije.

    Ob predpostavki, da imate preprosto nastavitev (CentOS 7, Apache 2.4.x in PHP 5.6.20) in samo eno spletno mesto (brez skupnega gostovanja) ...

    V smislu PHP je $ _SERVER ["SERVER_NAME"] element PHP, registriran v nadrazredu $ _SERVER na podlagi vaše konfiguracije Apache (direktiva ** ime strežnika ** z UseCanonicalName vklopljeno) v httpd.conf (naj bo iz omogočene konfiguracije navideznega gostitelja) datoteke, karkoli itd.). HTTP_HOST izhaja iz glave gostitelja HTTP. Obravnavajte to kot vnos uporabnika. Pred uporabo filtrirajte in preverite.

    Tukaj je primer, kjer uporabljam $ _SERVER ["SERVER_NAME"] kot osnovo za svojo primerjavo. Naslednja metoda je za določen podrejeni razred, ki sem ga poimenoval ServerValidator (podrejen Validatorja). ServerValidator pred uporabo potrdi šest ali sedem elementov v $ _SERVER.

    Ko ugotavljam, ali je zahteva HTTP POST, uporabljam to metodo.

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

    Do takrat, ko bo ta metoda poklicana, bo izvedeno vse filtriranje in preverjanje ustreznih elementov $ _SERVER (in njihovih ustreznih nizov lastnosti).

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

    Preveri, ali se vrednost $ _SERVER ["HTTP_HOST"] (končno izhaja iz zahtevane glave gostitelja HTTP) ujema s $ _SERVER ["SERVER_NAME"].

    Zdaj za razlago svojega primera uporabljam superglobalni pogovor, a to je zato, ker nekateri ljudje ne poznajo INPUT_GET, INPUT_POST in INPUT_SERVER v zvezi z filter_input_array ().

    Bistvo je, da na svojem strežniku ne obdelam zahtev POST, razen če so izpolnjeni vsi štirje pogoji. Zato v smislu zahtev POST zavrnitev podajanja glave gostitelja HTTP (prisotnost preverjena za prej) doom uroke za stroge brskalnike HTTP 1.0... Poleg tega se zahtevani gostitelj mora ujemati z vrednostjo ServerName v httpd.conf in po razširitvi - vrednost $ _SERVER ("SERVER_NAME") v supermacleu $ _SERVER. Spet bi uporabil INPUT_SERVER s funkcijami filtra PHP, vendar ste mi prekinili drift.

    Kot je poudaril balusC, SERVER_NAME ni zanesljiv in ga je mogoče spremeniti v konfiguraciji apache, konfiguraciji strežnika in požarnem zidu, ki je morda med vami in strežnikom.

    Naslednja funkcija vedno vrne resničnega gostitelja (vnesenega uporabnika) brez vrat in je skoraj zanesljiv:

    Funkcija getRealHost () (seznam ($ realHost,) = eksplodira (":", $ _ SERVER ["HTTP_HOST"]); vrni $ realHost;)

    deliti

    Za začetek bomo stran za registracijo izboljšali z možnostjo nalaganja avatarja. Izvirna slika mora biti v formatu jpg, gif ali png. Prav tako ne sme biti večji od 2 MB. Ne skrbite, po stiskanju s skriptom bo avatar velik približno 3 kb in v formatu jpg. Odprite stran reg.php in dodajte oznako < oblika> vrstica enctype = "multipart / form-data" kot v primeru:


    registracija










    Zdaj prihranimo reg.php

    2. Nato morate v tabeli ustvariti drugo polje uporabniki... Pojdi do phpmyadmin, izberite zahtevano podlago in tabelo.


    Nastavili smo vse vrednosti, kot je na sliki:

    Pot do avatarja bo zapisana v tem polju, shranjena pa bo v ločeni mapi, poimenujmo jo »avatarji«. Mapa bo v istem imeniku kot ostale datoteke skripta.

    3. Pojdite na datoteko shranite_ uporabnik. php in po odstranitvi presledkov v prijavi in ​​geslu dodajte naslednjo kodo:

    // odstranimo dodatne presledke
    $ login = trim ($ login);

    // dodaj novo *******************************************

    // dodamo ček za dolžino prijave in gesla
    if (strlen ($ login)< 3 or strlen($login) > 15) {
    exit ("Prijava mora vsebovati najmanj 3 znake in največ 15.");
    }
    if (strlen ($ geslo)< 3 or strlen($password) > 15) {
    exit ("Geslo mora vsebovati najmanj 3 znake in največ 15.");
    }

    if (! empty ($ _ POST ["fupload"])) // preverite, ali je uporabnik objavil sliko
    {
    $ fupload = $ _ POST ["fupload"]; $ fupload = trim ($ fupload);
    if ($ fupload == "" ali prazno ($ fupload)) (
    unset ($ fupload); // če je spremenljivka $ fupload prazna, jo izbrišite
    }
    }
    if (! isset ($ fupload) ali prazno ($ fupload) ali $ fupload == "")
    {
    // če spremenljivka ne obstaja (uporabnik ni poslal slike), ji nato dodeli vnaprej pripravljeno sliko z napisom "brez avatarja"
    $ avatar = "avatars / net-avatara.jpg"; // lahko narišete net-avatara.jpg ali vzamete vir
    }
    drugače
    {
    // drugače - naložite sliko uporabnika
    $ path_to_90_directory = "avatars /"; // mapa, kamor se naložita začetna slika in njena stisnjena kopija

    Če (preg_match (" / [.] (JPG) | (jpg) | (gif) | (GIF) | (png) | (PNG) $ /", $ _ FILES ["fupload"] ["ime"]) ) // preverite format izvirne slike
    {
    $ filename = $ _FILES ["fupload"] ["ime"];
    $ source = $ _FILES ["fupload"] ["tmp_name"];
    $ target = $ path_to_90_directory. $ ime datoteke;
    move_uploaded_file ($ source, $ target); // naložite izvirnik v mapo $ path_to_90_directory
    if (preg_match (" / [.] (GIF) | (gif) $ /", $ ime datoteke)) (
    $ im = imagecreatefromgif ($ path_to_90_directory. $ filename); // če je bil izvirnik v gif formatu, potem ustvarite sliko v isti obliki. Potrebno za naknadno stiskanje
    }
    if (preg_match (" / [.] (PNG) | (png) $ /", $ ime datoteke)) (
    $ im = imagecreatefrompng ($ path_to_90_directory. $ filename); // če je bil izvirnik v formatu png, potem ustvarite sliko v isti obliki. Potrebno za naknadno stiskanje
    }

    Če (preg_match (" / [.] (JPG) | (jpg) | (jpeg) | (JPEG) $ /", $ ime datoteke)) (
    $ im = imagecreatefromjpeg ($ path_to_90_directory. $ filename); // če je bil izvirnik v formatu jpg, potem ustvarite sliko v isti obliki. Potrebno za naknadno stiskanje
    }
    // USTVARJANJE KVADRATNE SLIKE IN NJENEGA NADALJNEGA KOMPRISIRANJA S STRANI www.codenet.ru
    // Ustvari kvadrat 90x90
    // dest - nastala slika
    // w - širina slike
    // razmerje - razmerje stranic
    $ w = 90; // kvadrat 90x90. Na voljo so tudi druge velikosti.
    // ustvarite izvirno sliko na podlagi
    // izvorno datoteko in določimo njeno velikost
    $ w_src = imagesx ($ im); // izračunamo širino
    $ h_src = imagesy ($ im); // izračunamo višino slike
    // ustvarite prazno kvadratno sliko
    // res je barve! to je pomembno!, sicer bomo imeli 8-bitni rezultat
    $ dest = imagecreatetruecolor ($ w, $ w);
    // izrežemo kvadratni center pri x, če je fotografija vodoravna
    če ($ w_src> $ h_src)
    imagecopyresampled ($ dest, $ im, 0, 0,
    krog ((max ($ w_src, $ h_src) -min ($ w_src, $ h_src)) / 2),
    0, $ w, $ w, min ($ w_src, $ h_src), min ($ w_src, $ h_src));
    // izrežemo kvadratni vrh pri y,
    // če je fotografija navpična (čeprav je možna tudi sredina)
    če ($ w_src<$h_src)
    imagecopyresampled ($ dest, $ im, 0, 0, 0, 0, $ w, $ w,
    min ($ w_src, $ h_src), min ($ w_src, $ h_src));
    // kvadratna slika je pomanjšana brez izrezkov
    če ($ w_src == $ h_src)
    imagecopyresampled ($ dest, $ im, 0, 0, 0, 0, $ w, $ w, $ w_src, $ w_src);
    $ datum = čas (); // izračuna čas v tem trenutku.
    imagejpeg ($ dest, $ path_to_90_directory. $ date. ". jpg"); // shranimo sliko jpg v želeno mapo, ime bo trenutni čas. Narejeno tako, da avatarji nimajo istega imena.
    // zakaj jpg? Zavzame zelo malo prostora + animacija slike gif, ki moti uporabnika, se uniči. Ni prijetno brati njegovih komentarjev, ko s kotičkom očesa opazite nekaj gibanja.
    $ avatar = $ path_to_90_directory. $ date. ". jpg"; // pot do avatarja vnesemo v spremenljivko.
    $ delfull = $ path_to_90_directory. $ ime datoteke;
    unlink ($ delfull); // izbrišemo prvotno naloženo sliko, ne potrebujemo je več. Naloga je bila dobiti miniaturo.
    }
    drugače
    {
    // v primeru neskladja formata izdajte ustrezno sporočilo
    exit ("Avatar mora biti v obliki JPG, GIF ali PNG");
    }
    // konec postopka nalaganja in dodelitev spremenljivke $ avatar na naslov naloženega avatarja
    }



    // dodal novo *******************************************
    // Nato sledi vse iz prvega dela članka, vendar je treba zahtevi dodati bazo podatkov.
    // se povežemo z bazo podatkov
    // preverimo obstoj uporabnika z isto prijavo
    $ result = mysql_query ("SELECT id FROM users WHERE login =" $ login "", $ db);
    if (! prazno ($ myrow ["id"]))) (
    exit ("Žal je uporabniško ime, ki ste ga vnesli, že registrirano. Vnesite drugo uporabniško ime.");
    }
    // če ne, shranite podatke
    $ result2 = mysql_query ("INSERT INTO users (login, password, avatar) VALUES (" $ login "," $ password "," $ avatar ")");
    // Preverite, ali so napake
    če ($ result2 == "TRUE")
    {
    echo "Uspešno ste se registrirali! Zdaj lahko obiščete spletno mesto. Domača stran";
    }
    drugače (
    echo "Napaka! Niste registrirani.";
    }
    ?>

    4. V isto bazo podatkov je treba dodati eno tabelo. Shranil bo naslove ip, ki so pri vnosu naredili napake. Tako bomo lahko omejili dostop tistim, ki so naredili napako več kot trikrat zaporedoma za 15 minut.Mislim, da se bodo morali programi, ki ugibajo gesla, dolgo časa zapletati.
    Pojdite na phpmyadmin in ustvarite novo tabelo s tremi polji:


    ip - ip -naslov.
    datum - datum neuspešne prijave za zadnjih 15 minut za uporabnika z dano ip. col - število napak v zadnjih 15 minutah za uporabnika z dano ip.
    V redu! Končano, zdaj spremenimo datoteko za preverjanje prijave in gesla, ker je zdaj naše geslo šifrirano. Odprite testreg.php in izbrišite vse, razen odstranitve presledkov v prijavi in ​​geslu. Nato dodajte naslednjo kodo:

    // odstranimo dodatne presledke
    $ login = trim ($ login);
    $ password = trim ($ password);

    // zamenjaj z novim ****************************************
    // se povežemo z bazo podatkov
    include ("bd.php"); // Datoteka bd.php mora biti v isti mapi kot vsi ostali, če ni, potem samo spremenite pot
    // mini preverjanje ugibanja gesla
    $ ip = getenv ("HTTP_X_FORWARDED_FOR");
    if (prazno ($ ip) || $ ip == "neznano") ($ ip = getenv ("REMOTE_ADDR");) // pridobivanje ip
    MySQL
    $ result = mysql_query ("SELECT col FROM oshibka WHERE ip =" $ ip "", $ db); // iz baze podatkov pridobimo število neuspešnih poskusov prijave za zadnjih 15 uporabnikov z danim ip
    $ myrow = mysql_fetch_array ($ rezultat);
    če ($ myrow ["col"]> 2) (
    // če obstaja več kot dve napaki, torej tri, potem izdajte sporočilo.
    exit ("3 -krat ste napačno vnesli prijavo ali geslo. Počakajte 15 minut pred naslednjim poskusom.");
    }
    $ password = md5 ($ password); // šifriramo geslo
    $ password = strrev ($ password); // za varnost dodajte vzvratno
    $ password = $ password. "b3p6f";
    // po želji lahko dodate več svojih znakov, na primer z vnosom "b3p6f". Če se to geslo razbije z metodo brute force na njihovem strežniku z istim md5, potem očitno ne bo nič dobrega. Svetujem pa, da vnesete druge znake, lahko na začetku vrstice ali na sredini.
    // V tem primeru je treba povečati dolžino polja za geslo v bazi podatkov. Šifrirano geslo je lahko veliko večje.

    $ result = mysql_query ("SELECT * FROM users WHERE login =" $ login "IN geslo =" $ password "", $ db); // iz baze podatkov pridobimo vse podatke o uporabniku z vnesenim uporabniškim imenom in geslom
    $ myrow = mysql_fetch_array ($ rezultat);
    if (prazno ($ myrow ["id"]))
    {
    // če uporabnik z vnesenim uporabniškim imenom in geslom ne obstaja
    // Zapišite, da dani ip ni mogel vnesti.
    $ select = mysql_query ("SELECT ip FROM oshibka WHERE ip =" $ ip "");
    $ tmp = mysql_fetch_row ($ select);
    if ($ ip == $ tmp) (// preverite, ali je uporabnik v tabeli "oshibka"
    $ result52 = mysql_query ("SELECT col FROM oshibka WHERE ip =" $ ip "", $ db);
    $ myrow52 = mysql_fetch_array ($ result52);
    $ col = $ myrow52 + 1; // dodamo še en neuspešen poskus prijave
    mysql_query ("UPDATE oshibka SET col = $ col, date = NOW () WHERE ip =" $ ip "");
    }
    drugače (
    mysql_query ("INSERT INTO oshibka (ip, date, col) VALUES (" $ ip ", NOW ()," 1 ")");
    // če v zadnjih 15 minutah ni bilo napak, vstavite nov zapis v tabelo "oshibka"
    }

    exit ("Žal je uporabniško ime ali geslo, ki ste jih vnesli, napačni.");
    }
    drugače (
    nbsp; // če se gesla ujemajo, začnemo sejo za uporabnika! Lahko mu čestitate, vstopil je!
    $ _SESSION ["password"] = $ myrow ["geslo"];
    $ _SESSION ["login"] = $ myrow ["prijava"];
    $ _SESSION ["id"] = $ myrow ["id"]; // ti podatki se zelo pogosto uporabljajo, zato bo prijavljeni uporabnik "nosil s seboj"

    // Nato si zapomnimo podatke v piškotkih za kasnejšo prijavo.
    // POZOR !!! NAREDITE NA VAŠO OSEBO, KER SE PODATKI Hranijo v piškotih brez šifriranja
    če ($ _POST ["shrani"] == 1) (
    // Če uporabnik želi, da se njegovi podatki shranijo za naslednjo prijavo, jih shranimo v piškotke svojega brskalnika
    setcookie ("prijava", $ _POST ["prijava"], čas () + 9999999);
    setcookie ("geslo", $ _POST ["geslo"], čas () + 9999999);
    }}
    odmev " "; // preusmerite uporabnika na glavno stran, tam bo obveščen o uspešni prijavi
    ?>

    5. Popolnoma spremenite glavno stran. Na njem je treba prikazati avatar uporabnika, prikazati povezavo za odjavo iz računa in dodati potrditveno polje, da si zapomnite geslo ob prijavi.
    Index.php

    // celoten postopek deluje na sejah. V njem so shranjeni podatki uporabnika, medtem ko je na spletnem mestu. Zelo pomembno je, da jih zaženete na samem začetku strani !!!
    session_start ();
    include ("bd.php"); // Datoteka bd.php mora biti v isti mapi kot vsi ostali, če ni, potem samo spremenite pot
    če (! prazno ($ _ SESSION ["prijava"]) in! prazno ($ _ SESSION ["geslo"]))
    {
    // če v sejah obstaja prijava in geslo, ju preverimo in pridobimo avatar
    $ login = $ _SESSION ["prijava"];
    $ password = $ _SESSION ["geslo"];
    $ result = mysql_query ("SELECT id, avatar FROM users WHERE login =" $ login "IN geslo =" $ password "", $ db);
    $ myrow = mysql_fetch_array ($ rezultat);
    // pridobimo zahtevane uporabniške podatke
    }
    ?>


    Domača stran


    Domača stran

    if (! isset ($ myrow ["avatar"]) ali $ myrow ["avatar"] == "") (
    // preverimo, ali so bili uporabniški podatki pridobljeni iz baze podatkov. Če ne, potem ni vnesel ali pa je geslo v seji napačno. Prikažemo okno za prijavo. Vendar ga ne bomo prikazali tistim, ki so vstopili, ga ne potrebujejo več.
    tiskanje<<


    TUKAJ;

    Če (isset ($ _ COOKIE ["login"])) // ali obstaja spremenljivka z prijavo v COOKIE. Moral bi biti, če je uporabnik ob prejšnji prijavi kliknil potrditveno polje »Zapomni si me«
    {
    // če da, potem vnesite njegovo vrednost v obrazec. V tem primeru se uporabniku prikaže, da je njegova prijava že vnesena v zahtevani stolpec
    echo "value =" ". $ _ COOKIE [" login "]." ">";
    }

    tiskanje<<




    TUKAJ;

    Če (isset ($ _ COOKIE ["geslo"])) // ali je v COOKIE spremenljivka z geslom. Moral bi biti, če je uporabnik ob prejšnji prijavi kliknil potrditveno polje »Zapomni si me«
    {
    // če da, potem vnesite njegovo vrednost v obrazec. V tem primeru se uporabniku prikaže, da je njegovo geslo že vneseno v zahtevani stolpec
    echo "value =" ". $ _ COOKIE [" password "]." ">";
    }

    Natisni<<



    Zapomni si me.






    Registriraj se zdaj



    Prijavljeni ste kot gost

    TUKAJ;
    }
    drugače
    {
    // ob uspešni prijavi uporabnik dobi vse, kar je spodaj med zvezdicami.

    tiskanje<<
    Na spletno mesto ste prijavljeni kot $ _SESSION (odjava)


    Ta povezava je na voljo samo registriranim uporabnikom

    Vaš avatar:




    TUKAJ;

    //************************************************************************************
    // ob uspešni prijavi uporabnik dobi vse, kar je zgoraj med zvezdicami.
    }
    ?>



    6. Uporabnikom, ki so prijavljeni, je treba omogočiti odjavo iz računa. Na glavni strani je že obstajala izhodna povezava. Toda ta datoteka še ne obstaja. Ustvarimo torej novo datoteko exit.php s kodo:

    session_start ();
    if (prazno ($ _ SESSION ["prijava"]) ali prazno ($ _ SESSION ["geslo"]))
    {
    // če ni seje z uporabniškim imenom in geslom, je do te datoteke prišel odklenjen uporabnik. On ne spada sem. Izdamo sporočilo o napaki, ustavimo skript
    exit ("Dostop do te strani je dovoljen samo registriranim uporabnikom. Če ste registrirani, vnesite spletno mesto s svojim uporabniškim imenom in geslom
    Domača stran ");
    }

    unset ($ _ SESSION ["geslo"]);
    unset ($ _ SESSION ["login"]);
    unset ($ _ SESSION ["id"]); // uničenje spremenljivk v sejah
    izhod (" ");
    // pošlje uporabnika na glavno stran.
    ?>

    To je torej vse! Uporabite ga za svoje zdravje! Vso srečo!