Kuunda usajili wa mtumiaji wa php na idhini. Kuunda mfumo rahisi wa usajili wa watumiaji katika PHP na MySQL

Si muda mrefu uliopita mmoja wa wageni wangu aliniuliza niandike makala kuhusu jinsi ya kusajili na kuidhinisha watumiaji kwenye tovuti. Kwa kweli, ninatimiza ombi lake, na katika makala hii nitazungumzia jinsi hii inafanywa.

Kuna njia kadhaa kuunda usajili wa mtumiaji na idhini, lakini katika makala hii nitachambua moja yangu favorite - kupitia kikao au utaratibu wa kuki.

Kwanza kabisa, ikiwa unataka kujiandikisha kwenye tovuti yako, basi unahitaji kuelewa ambapo data ya mtumiaji itahifadhiwa. Inaweza kuhifadhiwa katika faili ya maandishi ya kawaida, in Faili ya XML, au kwenye hifadhidata. Chaguzi mbili za kwanza ni hatari sana, kwa hivyo sikupendekeza utumie. Na hapa kuna chaguo la tatu - kuhifadhi habari za mtumiaji kwenye hifadhidata- maarufu zaidi, na ni njia hii ya kuhifadhi habari ambayo mimi kukushauri kutumia.

Tumeamua mahali pa kuhifadhi. Sasa hebu tuende moja kwa moja algorithm ya idhini:

  1. Tengeneza fomu ya usajili HTML.
  2. Pokea data kutoka kwa fomu iliyo kwenye hati ya kidhibiti.
  3. Angalia data iliyopokelewa, na ikiwa si sahihi, kisha uelekeze upya kwenye fomu ya usajili.
  4. Ikiwa data ni sahihi, basi iandike kwenye hifadhidata.

Huo ndio mchakato mzima usajili wa mtumiaji kwenye tovuti. Hiyo ni, usajili ni kuokoa habari kuhusu mtumiaji kwenye tovuti.

Hatua inayofuata ni idhini ya mtumiaji kwenye tovuti, hata hivyo, kabla ya kuendelea nayo, nitakuambia kuhusu hatua moja muhimu katika fomu ya usajili - nenosiri. Ninapendekeza sana usihifadhi nywila katika maandishi wazi (kwa mfano, " 123456 "). Hakikisha umezisimba kwa njia fiche, angalau kwa kutumia chaguo la kukokotoa md5(). Na uhifadhi nenosiri lililosimbwa kwenye hifadhidata.

Sasa idhini. Jambo la kwanza unahitaji kuelewa ni kwamba habari ya idhini lazima ihifadhiwe mahali fulani. Chaguo rahisi ni kuhifadhi habari kwenye kikao (au in kuki) Na sasa algorithm:

  1. Unda fomu ya uidhinishaji wa mtumiaji HTML, ambapo mtumiaji atalazimika kuingia kuingia kwake na nenosiri.
  2. Katika hati ya kidhibiti, kubali data kutoka kwa mtumiaji. Ikiwa ulinisikiliza na kuhifadhi nywila zilizosimbwa kwenye hifadhidata, basi kwanza usimbaji nenosiri linalotokana. Ikiwa kuna manenosiri wazi katika hifadhidata, basi hakuna haja ya kusimba kwa njia fiche.
  3. Angalia usahihi wa data iliyoingizwa, na ikiwa kuingia na nenosiri linalingana na mtumiaji aliyepo kwenye hifadhidata, basi iandike kuki au maelezo ya kikao na kuingia na nenosiri lililosimbwa (au nenosiri lililofunguliwa ikiwa hukulisimba kwa njia fiche).
  4. Ikiwa kuingia na/au nenosiri limeingizwa vibaya, kisha uelekeze upya kwa fomu ya idhini.

Sasa una habari muhimu kuhusu idhini ya mtumiaji, ambayo imehifadhiwa ndani yake kuki au kwenye seva (ikiwa ni kikao). Kwa kweli, sasa unahitaji kuangalia habari hii kwenye kila ukurasa wa tovuti na uihakikishe kwa njia sawa na kuangalia fomu ya idhini. Hiyo ni, unasoma kutoka kuki(kikao) kuingia na nenosiri, na uangalie. Ikiwa ni sahihi, basi onyesha ukurasa mmoja (kwa watumiaji waliojiandikisha), na ikiwa sio sahihi, kisha uonyeshe ukurasa mwingine (kwa wageni).

Na jambo la mwisho. Jinsi kifungo kinafanywa Utgång"? Rahisi sana. Unapobonyeza kitufe hiki, the kuki, au kikao. Kwa hivyo, mtumiaji hufukuzwa kiotomatiki kutoka kwa wavuti.

Kama unaweza kuona, kila kitu ni cha msingi, lakini wakati wa kutekeleza algorithm hii hakika utakuwa na maswali mengi. Kwa mfano, nini cha kufanya wakati wa kusajili mtumiaji ambaye kuingia kwake tayari iko kwenye hifadhidata. Utekelezaji wa ukaguzi wa pembejeo mbalimbali, utekelezaji wa hundi ya kuwepo barua pepe na kadhalika - yote haya ni ngumu sana ikiwa unafanya kwa mara ya kwanza. Hata hivyo, nilitoa juisi. Ikiwa una maswali wakati wa utekelezaji, uliza kwenye jukwaa au kwenye maoni.

Kila mtu ambaye hutengeneza tovuti mapema au baadaye anakabiliwa na kazi kama vile idhini ya mtumiaji na uthibitishaji, kutekelezwa kwa usahihi kwa kutumia lugha ya programu, na si kutumia kiwango cha itifaki ya http. Leo tutaangalia mfano wa kuunda idhini rahisi kwa kutumia lugha ya programu ya PHP, na tutahifadhi data ya mtumiaji katika hifadhidata ya MySQL.

Njia iliyo hapa chini ni rahisi au, kama ilivyokuwa, msingi wa kuunda idhini ya kawaida, lakini unaweza kuitumia kwa urahisi, kwa kuwa inafanya kazi vizuri, na unaweza pia kuboresha njia hii mwenyewe na kutekeleza kwenye tovuti yako.

Njia hii inategemea vikao, lakini pia ninatumia vidakuzi hapa, ili kivinjari kukumbuka mtumiaji ambaye alithibitisha mara ya mwisho, ili usiingie kuingia kila wakati, unaweza, bila shaka, kuhifadhi nenosiri katika vidakuzi, lakini hii. si salama, hata kama imesimbwa kwa njia fiche. Ili kumaliza kipindi, funga tu kivinjari na uifungue tena.

Kuunda vitu kwenye hifadhidata

Tuendelee na mazoezi. Kwanza, hebu tuunde jedwali la kuhifadhi data ya mtumiaji kwenye hifadhidata ya MySQL. Ninapendekeza kutumia muundo rahisi wa meza ( Kwa kweli, unaweza kuiongezea na kitu, hifadhidata yangu inaitwa mtihani, na meza ni watumiaji):

TUNZA TABLE test.users(kitambulisho cha mtumiaji INT(11) AMBACHO HAJALINDIKWA SIO NULL_INCREMENT_AUTO_INCREMENT, mtumiaji_kuingia VARCHAR(30) SI BATILI, nenosiri_la mtumiaji VARCHAR(32) SI BATILI, UFUNGUO WA MSINGI (kitambulisho_cha_mtumiaji)) MHENGINE = MYSET FUNGUA_YA_MFUMO;

Na wacha tuongeze mara moja kiingilio kimoja kwenye jedwali hili:

Ingiza kwenye test.users (user_login, user_password) thamani ("mylogin",202cb962ac59075b964b07152d234b70")

Kwa jumla tulipata:

  • Ingia- mylogin;
  • Nenosiri -;

Sisi, bila shaka, tutahifadhi nenosiri katika fomu ya haraka, kwa kuwa kuhifadhi nenosiri katika maandishi wazi ni, kuiweka kwa upole, si salama. Hashi yetu ya nenosiri hapo juu ni 123, kwa hivyo tunapoingiza nenosiri kwenye fomu, tutaingia haswa 123, na sio.

Kutengeneza fomu ya usajili

Ili mtumiaji ajiandikishe mwenyewe, fanya fomu, data ambayo itatumwa kwenye faili ya usindikaji wa usajili, i.e. kurekodiwa katika hifadhidata. Kwa mfano, hapa kuna njia rahisi zaidi:

0) ( $error = "Tayari kuna mtumiaji aliye na kuingia huku"; ) // Ikiwa sivyo, basi ongeza mtumiaji mpya if(!isset($error)) ( $login = mysql_real_escape_string(trim(htmlspecialchars($_POST[ "ingia" ]))); // Ondoa nafasi na upate neno la siri $password = md5(trim($_POST["password"])); mysql_query("INSERT INTO users SET user_login="".$login."" , user_password=" ".$password.""); echo "Umejiandikisha kwa mafanikio na kuingia - ".$login; exit(); ) vinginevyo ( // ikiwa kuna kuingia kama hivyo, basi tunazungumza juu yake echo $error; ) ) //kwa chaguo-msingi data itatumwa kwa faili moja ya kuchapisha<<< html

Ingia
Nenosiri
html; ?>

Kwa njia, kwa njia hii ni bora kutumia barua za Kilatini kwa kuingia ( hizo. Kiingereza), ikiwa unataka kuandika kuingia kwa Kirusi, itabidi urekebishe kidogo msimbo. Unaweza kutaja faili chochote unachotaka ( kwa jaribio nilitumia reg.html).

Kumbuka! Kwa majaribio, mimi hutumia faili moja tu, niliiita mylogin.html (msimbo wa faili hapa chini). Unaweza kuitumia kwenye faili zako na kuziita chochote unachotaka, ninaelezea mchakato wa idhini yenyewe hapa, ili uweze kuitumia kila mahali. Kwa njia, katika faili zote utalazimika kutumia session_start() kazi; ili uweze kuangalia ikiwa mtumiaji ameidhinishwa au la. Na jambo moja zaidi, bila shaka, andika mipangilio yako ya kuunganisha kwenye hifadhidata.

Kuunda fomu ya idhini

"."Umeingia
Wale. tumeangalia kipindi na tunaweza kufungua ufikiaji wa data fulani"; ) vinginevyo ( $login = ""; //angalia kidakuzi, labda tayari ametembelea hapa ikiwa (isset($_COOKIE["CookieMy"]))( $ login = htmlspecialchars( $_COOKIE["CookieMy"]); ) //fomu ya kuchapisha rahisi<<< html

Ingia
Nenosiri
html; )?>

Kumbuka! Ikiwa ghafla mchanganuzi wako wa php anakataa kufanya kazi, i.e. Nambari ya php yenyewe inaonyeshwa kwenye skrini yako, basi huna usindikaji wa PHP uliowezeshwa katika faili za html. Mipangilio inafanywa katika faili ya usanidi wa seva ya wavuti httpd.conf (ikiwa apache):

AddType application/x-httpd-php .php .html

Katika IIS, katika dirisha la Kuweka Ramani ya Moduli, ongeza *.php kwenye *.html, ikitenganishwa na koma. Hii ni ikiwa unaifanya nyumbani kwenye seva yako ya wavuti, na ikiwa utafanya haya yote kwa mwenyeji, basi utalazimika kuwaandikia na kuwauliza wafanye mabadiliko yanayohitajika; wahudumu wengine tayari wamewafanya.

Nilitoa maoni kwa nambari, kwa hivyo nadhani kila kitu kinapaswa kuwa wazi. Kwa mara nyingine tena, ninakukumbusha kwamba katika faili zote ambazo hutaki kuonyesha yaliyomo kwa watumiaji wasioidhinishwa, lazima uandike session_start, na, vizuri, hiyo ndiyo yote. Ikiwa una maswali, uliza kwenye maoni. Bahati njema!

Kutoka kwa mwandishi: Hivi karibuni au baadaye, kila msanidi wa wavuti anakabiliwa na kazi ya kuzuia ufikiaji wa ukurasa / kurasa au saraka fulani. Hii inaweza kuwa ukurasa wa siri kwenye tovuti, sehemu ya usimamizi ya tovuti, au sehemu nyingine yoyote ambayo tunataka kuzuia ufikiaji na kutoa nenosiri pekee. Kwa kufanya hivyo, unaweza, bila shaka, kutumia zana za seva. Nadhani mwenyeji yeyote wa kisasa ana kazi ya kulinda saraka, ambapo unaweza kuunda mtumiaji, kumpa nenosiri na, baada ya kulinda saraka, ufikiaji wa saraka iliyofungwa itatolewa tu baada ya kuingia sahihi. kuingia na nenosiri. Lakini wakati mwingine unataka kuandika kitu mwenyewe, kitu haraka, rahisi, lakini wakati huo huo kuaminika ...

Katika somo hili tutajaribu kuandika mfumo wetu rahisi wa uidhinishaji. Tutakuwa na ukurasa wa siri - wacha tuseme itakuwa ukurasa wa msimamizi, ambao tutatoa ufikiaji tu kwa mtumiaji aliyeidhinishwa. Mfumo wetu wa uidhinishaji utategemea utaratibu wa kikao. Kabla ya kuendelea na somo hili, ninapendekeza ujitambulishe na moja ya masomo yangu ya awali, ambayo sisi, hasa, tunazingatia kazi ya vikao -.

Kwa kifupi, kazi zote zilizo na vikao zinaweza kugawanywa katika hatua 3:

Ufunguzi wa kikao. Katika kurasa zote ambapo kazi na vipindi inadokezwa, kipindi lazima kianzishwe kwa kutumia kitendakazi session_start().

Kusajili vigezo vya kikao.

Kuondoa usajili wa vigezo vya kikao kwa kutumia chaguo za kukokotoa unset() na kufunga kipindi kwa kutumia kitendakazi cha session_destroy().

Hatua ya 1

Kwa hiyo, kwa kazi yetu, tutaunda faili 3 - Ukurasa wa nyumbani (index.php), Mawasiliano (contact.php) na jopo la Msimamizi (admin.php). Tafadhali kumbuka kuwa kiendelezi cha faili ambacho tutazuia ufikiaji kinapaswa kuwa .php. Kama ulivyokisia, tutazuia ufikiaji wa faili ya admin.php. Nambari ya faili zote ni rahisi zaidi - ni aina ya menyu kwenye mstari na viungo vya kurasa zingine, na chini yake maandishi ya kibinafsi ya kila ukurasa ili tuweze kutofautisha kutoka kwa kila mmoja. Hapa, kwa mfano, kuna nambari ya ukurasa wa faharisi:

Nyumbani | Anwani | Msimamizi


Huu ndio ukurasa kuu

Kurasa zilizobaki, kama nilivyosema, hutofautiana nayo tu kwenye maandishi baada ya lebo ya mstari. Sikuunda kurasa kamili na vitambulisho vya meta, kwani kazi yetu ni kuzuia ufikiaji wa ukurasa fulani.

Hatua ya 2

Kwa sasa, tunaweza kuvinjari kurasa zote kwa uhuru, pamoja na ukurasa wa msimamizi. Tunawezaje kuzuia ufikiaji wake? Je, algorithm itakuwaje? Tutafanya yafuatayo: mwanzoni kabisa mwa ukurasa tutaangalia ikiwa lebo tunayohitaji iko kwenye kikao au, kwa urahisi zaidi, ikiwa utaftaji fulani wa kikao upo (tunaweza pia kuangalia ikiwa thamani ya kutofautisha ya kikao iko. sawa na thamani fulani). Ikiwa hakuna tofauti kama hiyo, basi mtumiaji anayeomba ukurasa huu hajaidhinishwa, ambayo inamaanisha tutamwelekeza kwenye ukurasa wa idhini, ambapo ataulizwa kujaza fomu na jina na nenosiri. Algorithm ni rahisi sana - wacha tuitekeleze. Nenda kwenye faili ya admin.php, fungua muundo wa PHP juu kabisa na uandike nambari ifuatayo:

session_start();

ikiwa (! $_SESSION [ "admin" ] ) (

kichwa ("Eneo: enter.php");

Utgång ;

Hebu sasa tusome kanuni hii. Kwanza, tulifungua kikao, kama unavyokumbuka - hii ni sharti wakati wa kufanya kazi na vikao. Kisha, tuliunda hali rahisi ambayo inaweza kusomeka kama hii: "ikiwa kipengele cha msimamizi hakipo katika safu $_SESSION, tutatekeleza kizuizi cha vitendo kilichoambatanishwa katika mabano ya waendeshaji." Na katika kizuizi cha msimbo, kwa kutumia kichwa () kazi, tunaelekeza mtumiaji kwenye ukurasa wa enter.php (hii ni ukurasa wa idhini). Baada ya kitendakazi cha kichwa(), lazima tukamilishe utekelezaji wa hati kwa kutumia kitendakazi cha kutoka (). Ikiwa hali haijatimizwa, yaani, kutakuwa na kipengele cha msimamizi katika safu $_SESSION, hii ina maana kwamba mtumiaji tayari ameidhinishwa kwa ufanisi, na tutaruka kizuizi cha hatua katika mabano ya waendeshaji, yaani, hakuna uelekezaji upya utakaotokea, na tunaonyesha ukurasa ulioombwa.

Hatua ya 3

Sasa tunahitaji kuunda ukurasa wa kuingia - enter.php. Ili kufanya hivyo, nakala nakala ya msimbo, kwa mfano, ya ukurasa wa contact.php, unda faili mpya na ubandike msimbo ulionakiliwa ndani yake. Hifadhi faili chini ya jina enter.php. Sasa kwenye ukurasa huu tutaandika fomu rahisi ya kuingiza jina lako la kuingia na nenosiri:

Nyumbani | Anwani | Msimamizi


Huu ndio ukurasa wa kuingia.
Jina la mtumiaji:
Nenosiri:

< p > < a href = "index.php" >nyumbani< / a > | < a href = "contact.php" >Anwani< / a > | < a href = "admin.php" >Msimamizi< / a > < / p >

< hr / >

< br / >

< form method = "post" >

Jina la mtumiaji:< input type = "text" name = "user" / > < br / >

Nenosiri:< input type = "password" name = "pass" / > < br / >

< input type = "submit" name = "submit" value = "Ili kuingia" / >

< / form >

Kila kitu ni rahisi hapa. Fomu ina mashamba 2: shamba la kuingia (tuliipa jina "mtumiaji") na shamba la nenosiri (linaloitwa "kupita"). Pia tumeunda kitufe (jina "tuma"), unapobofya, data kutoka kwa fomu itatumwa. Data inatumwa kwa kutumia mbinu ya chapisho - tulibainisha hii katika sifa ya mbinu ya lebo ya fomu - na itachakatwa kwenye ukurasa huo huo. Sasa tunaweza kujaribu kwenda kwenye ukurasa wa msimamizi. Ikiwa kila kitu kimefanywa bila makosa, hatutaweza kufika huko, lakini kila wakati tutaishia kwenye ukurasa wa idhini.

Inashangaza!

Hatua ya 4

Ifuatayo, tunahitaji kuandika kidhibiti kwenye ukurasa na fomu ambayo itapokea data kutoka kwa fomu na kulinganisha ikiwa kuingia na nenosiri kutoka kwa fomu zinalingana na tulizo nazo. Ili kufanya hivyo, fungua muundo wa PHP juu ya ukurasa wa kuingia na uanze kuandika nambari. Kwanza, ni lazima tufungue kikao - baada ya yote, hii ndio ambapo tutaunda lebo katika kikao ikiwa tumepokea kuingia sahihi na nenosiri. Katika ukurasa huu huo tutahifadhi kuingia na nenosiri la msimamizi. Kawaida data hii huhifadhiwa kwenye hifadhidata (DB), lakini tutakuwa na mtumiaji 1 tu (msimamizi), na kwa hivyo kuhifadhi data yake ili kuingia kwenye DB sio busara kabisa. Ikiwa kuna mtumiaji zaidi ya mmoja, yaani, kwa mfano, tunaandika mradi ambao kuna usajili, basi, bila shaka, katika kesi hii itakuwa vigumu kufanya bila database.

Kwa hiyo, kuingia kwetu kutakuwa "admin" na tutaihifadhi katika variable ya $ admin. Nenosiri litakuwa "mypass" na litahifadhiwa katika tofauti ya $pass. Lakini kuhifadhi nywila katika maandishi wazi haikubaliki - hii ni kinyume na kanuni za usalama. Tutahifadhi nenosiri katika fomu iliyosimbwa, na kazi ya md5() itatusaidia kusimba kwa njia fiche. Kazi hii husimba kamba kwa kutumia algorithm maalum, na pato ni safu ya herufi 32 (inayoitwa hashi). Ikiwa tutasimba kamba "mypass" (hii inaweza kufanywa, kwa mfano, katika faili ya contact.php):

echo md5 ("mypass");

basi matokeo yatakuwa mstari “a029d0df84eb5549c641e04a9ef389e5″ - hili litakuwa nenosiri letu lililosimbwa. Kwa sasa, nambari ya ukurasa wa kuingia itakuwa kama hii:

Nyumbani | Anwani | Msimamizi


Huu ndio ukurasa wa kuingia.
Jina la mtumiaji:
Nenosiri:

session_start();

$admin = "admin" ;

$ kupita = "a029d0df84eb5549c641e04a9ef389e5";

< p > < a href = "index.php" >nyumbani< / a > | < a href = "contact.php" >Anwani< / a > | < a href = "admin.php" >Msimamizi< / a > < / p >

< hr / >

< br / >

< form method = "post" >

Jina la mtumiaji:< input type = "text" name = "user" / > < br / >

Nenosiri:< input type = "password" name = "pass" / > < br / >

< input type = "submit" name = "submit" value = "Ili kuingia" / >

< / form >

Hatua ya 5

Sasa hebu tuangalie kile tulichopokea kutoka kwa fomu na kile tulicho nacho katika vigezo vya kuingia na nenosiri. Tutafanya hivi kwa masharti - tu ikiwa kifungo cha fomu kinasisitizwa. Tunawezaje kuangalia hili? Kitufe kina jina ("wasilisha"), na tunasambaza data kwa kutumia mbinu ya chapisho. Ipasavyo, tunaweza kuangalia kama kipengee cha kuwasilisha kipo katika $_POST safu. Ikiwa kuna, kifungo kilishinikizwa, na tutafanya vitendo ili kuthibitisha data iliyotumwa, vinginevyo hatutafanya chochote. Baada ya kutangaza kuingia na nenosiri, tunaandika hali:

if($_POST["submit"])( if($admin == $_POST["user"] NA $pass == md5($_POST["pass"]))( $_SESSION["admin"] = $ admin; kichwa("Eneo: admin.php"); toka; )ingine echo "

Kuingia au nenosiri sio sahihi!

"; }

ikiwa ($_POST["wasilisha"]) (

ikiwa ($ admin == $_POST [ "mtumiaji" ] NA $ pass == md5 ( $ _POST [ "pass" ] ) ) (

$_SESSION["admin"] = $admin;

Utgång ;

) mwangwi mwingine "

Kuingia au nenosiri sio sahihi!

" ;

Tulifanya hali ya kuangalia kuingia na nenosiri mara mbili. Hii inafanywa kwa kutumia opereta wa kimantiki NA (inaweza pia kuandikwa kwa njia hii - "&&"). Hali inaweza kusomwa kama ifuatavyo: "ikiwa (utofauti wa $admin ni sawa na kipengee cha mtumiaji katika safu $_POST NA utofauti wa $pass ni sawa na heshi ya kipengee cha kupita kwenye safu $_POST) basi (tunafanya kizuizi cha vitendo) la sivyo tunaonyesha maandishi 'Ingia au nenosiri sio sahihi!'

Iwapo jozi la nenosiri la kuingia linalingana, basi tunasajili kibadilishaji cha kipindi $_SESSION["admin"] na kuelekeza mtumiaji kwenye ukurasa wa msimamizi - admin.php.
Wacha sasa tujaribu kujaribu kile ambacho tayari tumeunda. Ikiwa tutaingiza kuingia na nenosiri kwa uwongo kwa makusudi, tutapokea ujumbe wa onyo kwamba "Ingia au nenosiri sio sahihi!" Hebu sasa tujaribu kuingiza maelezo sahihi ya kuingia. Ikiwa hatujafanya makosa popote, basi baada ya kubofya kitufe cha "Ingia" tutajikuta kwenye ukurasa wa admin.

Hatua ya 6

Sasa kilichobaki kufanya ni kuongeza maelezo madogo. Kwa mfano, sasa tumeidhinishwa katika mfumo, lakini ikiwa tunaingiza anwani ya ukurasa wa idhini kwenye bar ya anwani, tutaifikia kwa urahisi na kuona fomu ya idhini. Hii haipaswi kutokea - ni mtumiaji ambaye hajaidhinishwa tu ndiye anayepaswa kuona fomu. Je, tunawezaje kurekebisha hili? Kumbuka kwamba kwenye ukurasa wa admin.php tuliangalia ikiwa lebo ilikuwa kwenye kikao. Ikiwa haipo, tulielekeza mtumiaji kwenye ukurasa wa uidhinishaji. Hapa tunaweza kufanya kitu kimoja, tu kinyume chake. Hiyo ni, tunaangalia pia ikiwa lebo iko kwenye kikao. Sasa tu tutahamisha mtumiaji kwenye ukurasa wa msimamizi ikiwa kuna lebo kama hiyo. Hii ni, kimsingi, mantiki. Ikiwa kuna lebo, basi mtumiaji tayari ameidhinishwa, na tunaweza kumhamisha kwenye ukurasa wa msimamizi. Kwenye ukurasa wa enter.php baada ya kipindi kuanza, ongeza msimbo ufuatao:

if($_SESSION["admin"])( header("Mahali: admin.php"); toka;)

ikiwa ($_SESSION["admin"]) (

kichwa ("Eneo: admin.php" ) ;

Utgång ;

Sasa, ikiwa mtumiaji aliyeidhinishwa anajaribu kuingiza jina la ukurasa wa uidhinishaji kwenye upau wa anwani, ataelekezwa kwenye ukurasa wa msimamizi. Mtumiaji ambaye hajaidhinishwa ataweza kufikia ukurasa wa uidhinishaji kwa uhuru.

Hatua ya 7

Hatua inayofuata ambayo tunahitaji kutoa ni utekelezaji wa kuingia kwa mtumiaji aliyeidhinishwa, yaani, hebu sema msimamizi amemaliza kazi yake na anahitaji kuondoka ili hakuna mtu mwingine anayeweza kufanya kazi chini ya akaunti yake. Ili kufanya hivyo, ongeza kiungo cha "Toka" kwenye ukurasa wa admin.php. Kiungo kitaongoza kwenye ukurasa huo huo, tu parameter tunayohitaji itaongezwa kwake. Kigezo kinaongezwa kwa kutumia alama ya kuuliza:

Utgång

< a href = "admin.php?do=logout" >Utgång< / a >

Kiungo hiki kinaweza kuwekwa mahali tunapohitaji - nitaiweka baada ya maandishi ya ukurasa. Kuhusu parameta, itapitishwa kwa kutumia njia ya GET (kumbuka kwamba tulisambaza data kutoka kwa fomu kwa kutumia parameter ya pili - POST). Wakati wa kutumia njia hii, data imeongezwa kwa anwani katika bar ya anwani na imetenganishwa na anwani kwa alama ya swali tu. Tunapita parameter moja - kufanya - na wakati huo huo kuwapa thamani "kutoka". Tunawezaje kuidhinisha mtumiaji sasa? Ni rahisi sana - hatua ya pili na ya tatu itatusaidia hapa wakati wa kufanya kazi na vikao. Wakati ukurasa unapopakia, tunaweza kuangalia thamani ya kipengee cha kufanya kutoka kwa safu $_GET. Iwapo ni sawa na mfuatano wa "toka", tutabatilisha utofauti wa kipindi $_SESSION["admin"] na kuharibu kipindi. Ipasavyo, hakutakuwa na lebo kwenye kikao baada ya hii, na katika kizuizi kinachofuata, ambapo tunaangalia uwepo wa lebo, mtumiaji ataelekezwa kwenye ukurasa wa idhini. Ni rahisi.

Salaam wote. Kwa hivyo tumejifunza vipengele vichache vya kuunda maumbo. Ni wakati wa kuchanganya ujuzi wetu ili kutatua tatizo kubwa zaidi. Wacha tuunda fomu rahisi zaidi ya idhini kwenye wavuti. Ili kufanya hivyo, tunahitaji mashamba mawili, tunaunda na kuunganisha saini kwao.

Sehemu ya kwanza ni ya kuingia, ya pili ni ya nenosiri. Na kwa pili sio rahisi sana. Kwa sababu kwa sasa ni sehemu ya maandishi tu.

Matokeo katika kivinjari:

Ili maandishi yaliyoingizwa ndani yake yabadilishwe na nyota, kama ilivyo kawaida kwa uwanja wa aina hii, unahitaji kufanya hatua moja rahisi. Yaani, kuchukua nafasi ya thamani ya sifa aina juu nenosiri:

Matokeo:

Kitufe cha kutuma fomu

Haya basi. Fomu yetu iko karibu kuwa tayari. Sasa, ili kukamilisha uumbaji wake, unahitaji kuunda kifungo ambacho kitatumika kuwasilisha fomu. Tatizo linatatuliwa kwa kutumia lebo na aina wasilisha.

Ikiwa kifungo kinapaswa kuwa na aina fulani ya uandishi, basi inaweza kufanyika kwa kutumia sifa thamani. Ni juu yako kupeana jina kwa kitufe au la; ukifanya hivi, seva itapokea jina hili, pamoja na thamani ya kitufe.

Kama sheria, jina la kifungo cha kuwasilisha fomu inahitajika wakati fomu ina vifungo kadhaa, ambayo kila mmoja hufanya kitendo maalum. Shukrani kwa hili, seva, kupokea jina na thamani ya kifungo kutoka kwa kivinjari, inaelewa ni kifungo gani mtumiaji alibofya na nini, ipasavyo, kinahitajika kufanywa.

Kama matokeo, nambari ya fomu yetu itakuwa kama ifuatavyo:

Matokeo katika kivinjari:

Kwa hiyo, kuna kazi - kufanya usajili katika mfumo na uwezekano wa idhini. Jinsi ya kufanya hivyo? Hebu tuanze kwa utaratibu.

Usajili kwenye php

Kila kitu ni rahisi hapa. Ghala la data linaundwa kwa ajili ya watumiaji. Kwa kawaida hii ni jedwali la hifadhidata. Inajumuisha sehemu kama vile kitambulisho, jina la mtumiaji na nenosiri. Sehemu zilizobaki ni za hiari. Unaweza kukusanya barua pepe za watumiaji, anwani zao, IP zinazowezekana, muda wa kufikia mtandao, maneno ya msimbo kutoka kwa kadi za benki, maswali ya usalama...

Kwa ujumla, jambo kuu ni jozi ya kuingia-nenosiri.

Jambo la kwanza muhimu- Nywila za mtumiaji haziwezi kuhifadhiwa katika maandishi wazi. Hiyo ni, kama maandishi. Haiwezekani kwa sababu ikiwa mtu mwingine atapata ufikiaji wa hifadhidata, atapokea hifadhidata ya nywila za kuingia kwa mtumiaji, ambazo haziwezekani kupenda. Na ikiwa unazingatia kuwa watumiaji wengi wana kuingia sawa na nenosiri kwenye huduma tofauti, hii inaweka data ya kibinafsi na fedha, mawasiliano ya kibinafsi na kila kitu kingine katika hatari.

Nenosiri lazima zihifadhiwe kama heshi. Hashing ni operesheni inayogeuza data asili kuwa aina fulani ya utumaji wa urefu unaojulikana. Hii ni nzuri kwa sababu waigizaji ni wa kipekee. Hiyo ni, ikiwa tutabadilisha angalau herufi moja katika data ya chanzo, matokeo ya operesheni ya hashing yatageuka kuwa tofauti kabisa, zaidi ya kutambuliwa. Operesheni ya hashing haiwezi kutenduliwa, yaani, haitawezekana kupanua data asili kutoka kwa muhtasari huu. Hivi ndivyo inavyotofautiana na usimbaji fiche.

MySQL na PHP zina kazi sawa ya kawaida na salama ya hashing - md5. Algorithm hii inachukua data na inatoa alama ya vidole.

Kwa hiyo, tunapokea data kutoka kwa mtumiaji, angalia ikiwa ni tupu, ikiwa haina wahusika wowote ambao hatuhitaji (usipunguze watumiaji sana). Na sasa tunatoa ombi kama hili:

WEKA NDANI YA `watumiaji` (`id`,`jina la mtumiaji`,`nenosiri`) THAMANI("",$quoted_jina la mtumiaji,MD5($quoted_password));

Tafadhali kumbuka kuwa nilitaja vijiumbe mahsusi $quoted_ kwa sababu kabla ya kuviingiza kwenye hoja, lazima viepukwe kwa kutumia mysql_real_escape_string() chaguo la kukokotoa. Kwa kuwa kazi hii hutumiwa mara nyingi sana, na imeandikwa kwa muda mrefu sana (Ninapenda wasanifu wa PHP), ninapendekeza kuiweka kwenye ganda lako. Kwa mfano, kama hii:

Nukuu ya kazi($var) ( return mysql_real_escape_string($var); )

Uidhinishaji katika php

Tumeongeza mtumiaji mpya na sasa ameidhinishwa. Tunamchorea fomu ya kuingia-nenosiri na kupata data yake. Nini kinafuata? Baada ya yote, tulipokea nenosiri kwa maandishi wazi, na katika database kuna hash ya nenosiri. Je, nitalazimika kubadilisha nenosiri kuwa heshi na kisha kuzilinganisha? Hapana, unaweza kuifanya rahisi - kwa ombi moja.

CHAGUA * KUTOKA KWA `watumiaji` WAPI `ingia`=$qoted_login NA `password`=MD5($quoted_password);

Hoja ikirudisha mfuatano, itakuwa mfuatano wenye data ya mtumiaji. Ikiwa sivyo, hakuna mtumiaji kama huyo kwenye jedwali. Data ya mtumiaji itakuwa muhimu sana kwetu - inafaa kuipata katika safu shirikishi.

Kumbuka mtumiaji

Sasa tunahitaji kukumbuka kuwa mtumiaji ameidhinishwa na kujua hasa ni nani. Jambo la kwanza linalokuja akilini ni kutumia vidakuzi kwa hili. Hakika, weka kuingia kwa mtumiaji na kitambulisho kwenye vidakuzi na kila wakati ujue ni nani anayeomba ukurasa kwa sasa.

Lakini hii ni mazoea mabaya. Kwa nini? Kwa sababu kidakuzi ni faili ambayo imehifadhiwa kwenye kivinjari cha mtumiaji na data kutoka kwa faili hii hutumwa kwa seva katika kila ombi. Kwanza, hupitishwa kama maandishi, ambayo inamaanisha ni rahisi kukatiza. Pili, hii ni maandishi rahisi yaliyotumwa na mtumiaji. Kwa hiyo, inaweza kuandikwa upya kihalisi. Kwa mfano, ikiwa tunaamua kuhifadhi jina la mtumiaji "Vasya" katika vidakuzi, anaweza kufungua usimamizi wa vidakuzi kwenye kivinjari chake, pata kidakuzi unachotaka na ubadilishe, sema, "Msimamizi". Ni hayo tu. Sasa, kwa kila ombi, tutapokea kuki, ambayo itatuambia jina la mtumiaji la mtumiaji - "Msimamizi".

Kwa hivyo, ni salama zaidi kuhifadhi data zote kwenye seva mahali pasipoweza kufikiwa na wavuti. Katika folda fulani ambayo haiwezi kufikiwa kutoka kwa kivinjari. Data yote kuhusu mtumiaji inapaswa kuandikwa kwenye folda hii na kusoma kutoka hapo kila wakati anapoomba hati. Ili kujua ni mtumiaji gani anamiliki faili ipi ya data, unahitaji kuita faili hiyo jina la kipekee na kutupa jina hili kwenye vidakuzi vya mtumiaji. Kwa hivyo, mtumiaji hataweza kujua jina la faili kwa mtumiaji wa Msimamizi - faili hii inatolewa na mfumo kwenye seva. Na hii hukuruhusu kuburuta nywila katika maandishi wazi kutoka hati hadi hati.

Nilichoeleza ni utaratibu wa kikao. Katika Perl, kwa mfano, kutumia vipindi unahitaji kupakia moduli. Na katika vikao vya PHP vinasaidiwa nje ya boksi. Kwa kweli, unachohitaji kujua ni session_start() kazi na $_SESSION safu. Hii ndiyo yote. Nitakuambia sasa.

Katika kila hati ambapo utaandika au kusoma kutoka kwa kikao, unahitaji kabla ya kutoa taarifa yoyote piga simu session_start() kazi. Hii itaanza kikao. Chaguo hili la kukokotoa litaunda faili ya kikao ikiwa haipo au isome ikiwa kidakuzi maalum kilipitishwa kwenye hati.

Ili kuandika data kwa kipindi, unahitaji tu kuiandikia kwa safu $_SESSION. Sasa tunahitaji kukumbuka kitambulisho cha mtumiaji.

$_SESSION["userid"] = $userinfo["id"];

Wote. Sasa, kila wakati mtumiaji anapoomba hati inayotumia vipindi, thamani ya kipengele $_SESSION["usrid"] itapatikana kwako.

Kwa hiyo, wakati mtumiaji aliingia kuingia kwake na nenosiri, tulipokea data yake kutoka kwa hifadhidata, ambayo inathibitisha kwamba mtumiaji kama huyo yuko kwenye hifadhidata yetu, tunamkumbuka kwenye kikao.

Jua ikiwa mtumiaji ameidhinishwa

Kweli, ni rahisi kama kuvuna pears! Sasa kwa kuwa unajua jinsi vipindi hufanya kazi, kujua ikiwa mtumiaji ameidhinishwa ni suala la mstari mmoja. Huyu hapa:

If(isset($_SESSION["userid"])) ( chapisha "mtumiaji ameidhinishwa";)

Ikiwa kitambulisho cha mtumiaji kinafafanuliwa katika kipindi, basi tayari amepitisha idhini. Lakini unawezaje kujua ni mtumiaji gani? Kuingia kwake ni nini? Tarehe ya kuzaliwa? Neno la nambari ya kadi ya benki? Jina la kuzaliwa la mama?

Kweli, ni wazi - fanya swali moja kwa meza ya watumiaji. Pia tunayo kitambulisho cha mtumiaji huyu.

CHAGUA * KUTOKA KWA `users` WAPI `id`=$quoted_userid

Jinsi ya kumtoa mtumiaji na kutoka nje

Naam, ni rahisi sana. Ikiwa tutaamua ikiwa mtumiaji ameidhinishwa na uwepo wa mtumiaji katika kipindi, basi ili kumwondoa tunahitaji kumwondoa hapo. Imefanywa kama hii:

Haijawekwa($_SESSION["userid"]);

Unaweza pia kuua kikao ili tu kuwa na uhakika. Hii itafuta kidakuzi cha mtumiaji na kuharibu faili ya kikao kwenye seva. Katika kesi hii, data zote zitapotea kutoka kwake. Imefanywa kama hii:

Session_destroy();

Ni hayo tu. Ikiwa una maswali yoyote, usisite kuwasiliana nasi. Zaidi ya hayo, unaweza kuwasiliana nami kupitia icq au barua na kuomba usaidizi wa jambo fulani. Mimi huwa sikatai. Ikiwa unahitaji usaidizi mkubwa, ninaweza kukuuliza malipo kidogo. Kwa kuongeza, ninaweza kukufundisha jinsi ya kutengeneza tovuti kwa mbali! Hii ni aina ya kocha na gwiji niliyenaye :) Na kama unataka kupokea masomo na mbinu kama hivyo, bila malipo, jiandikishe kwa RSS ya blogu yangu.

Chapisho hili linafadhiliwa na ibooknet.ru, ambayo hutoa ukarabati wa kompyuta za mkononi kwa bei nzuri. Binafsi, kompyuta yangu ya mkononi iko sawa na natumai sihitaji kuirekebisha. Nakutakia vivyo hivyo.