Internet Derazalar Android
Kengaytirmoq

PHP-ga ro'yxatdan o'tish. PHP va MySQL uchun oddiy foydalanuvchilarni ro'yxatga olish tizimini yaratish

Saytga tashrif buyuruvchilarni saytdagi ba'zi guruhlarga bo'lish uchun kichik tizimni o'rnatishga ishonch hosil qiling pHP-da ro'yxatdan o'tish.. Shunday qilib, siz an'anaviy ravishda tashrif buyuruvchilarni tasodifiy tashrif buyuruvchilar va qimmatbaho ma'lumotlarga ega bo'lgan ko'plab imtiyozli guruhlarga bo'lingansiz.

Aksariyat hollarda, bitta faylda PHPda yozilgan ko'proq soddalashtirilgan ro'yxatga olish tizimidan foydalaning. ro'yxatdan o'tish.php..

Shunday qilib, biz biroz chalg'itdik va endi ro'yxatga olish faylini batafsilroq ko'rib chiqamiz.

File Ro'yxatdan o'tish .php.

Siz vaqt massasini olib qo'ymaganingiz uchun, foydalanuvchilarni to'playdigan tizimni yarating, ulardan minimal aloqa ma'lumotlarini olib boring. Bunday holda, hamma MySQL ma'lumotlar bazasiga taqdim etiladi. Eng yuqori tayanch tezligi uchun biz Myisam formati va UTF-8 kodlashida biz foydalanuvchilar jadvalini yaratamiz.

Eslatma! Siz barcha skriptlarni bitta kodlashda yozishingiz kerak. Barcha sayt fayllari va MySQL ma'lumotlar bazasi bitta kodlashda bo'lishi kerak. Eng keng tarqalgan UTF-8 va Windows-1251 kodlari.

Siz hamma narsani kodlashda yozishingiz kerak bo'lgan narsalar uchun biz qandaydir tarzda gaplashamiz. Bu orada, ushbu ma'lumotlarni aniq belgilarni yaratadigan qat'iy qoida sifatida olib boring, aks holda skriptlarning ishi bilan bog'liq muammolar bo'ladi. Albatta, dahshatli narsa, albatta, lekin skriptda xatolarni topish uchun vaqtni yo'qotmaydi.

Ssenariyning o'zi qanday ishlaydi?

Biz hamma narsani soddalashtirishni va tezkor natijaga erishishni xohlaymiz. Shuning uchun biz foydalanuvchilardan faqat login, elektron pochta va uning parolini olamiz. Va spam robotlaridan himoya qilish uchun kichik CAPTCHA-ni o'rnating. Aks holda, Londonning har qanday bola bir necha daqiqada butun poydevorni ohakli foydalanuvchilar bilan to'ldiradigan kichik robot parserini yozadi va uning dahosi va jazosizligi va jazosizligi va jazosizligi va jazosizligi bilan xursand bo'ladi.

Mana, skriptning o'zi. Hammasi bitta faylda yozilgan. ro'yxatdan o'tish.php.:

! `; // qizil savol belgisi $ Sha \u003d $ sh. "Skripts / Pro /"; // Asosiy papkaga o'tish $ BG \u003d `BGCOLOR \u003d" # E1FJ "`; // Fon rangli chiziqlar?\u003e Ro'yxatdan o'tish script sterny.css "/\u003e

Bunday holda, skript o'zimga murojaat qiladi. Va bir shakl va yozilgan ma'lumotlar beruvchidir. Fayl ZIP arxivi tomonidan siqilganligi va konfiguratsiya faylini siqib chiqaradi va konfiguratsiya faylini, foydalanuvchi ma'lumotlar bazasi funktsiyasini o'z ichiga olgan fayl va registrator. Statsioner.php Fayl o'zi. Shuningdek, ish joylari uchun javobgar bo'lgan bir nechta fayllar.

Reg.Ru: domenlar va xosting

Rossiyada eng katta magnitafon va xosting provayderi.

Texnik xizmat ko'rsatish uchun 2 milliondan ortiq domen nomlari.

Rivojlantirish, domen uchun pochta, biznes echimlari.

Dunyo bo'ylab 700 mingdan ortiq mijozlar o'z tanlovlarini o'tkazdilar.

* Sichqonchani to'xtatish uchun sichqonchani bosing.

Oldinga oldinga

PHP va MySQL uchun oddiy foydalanuvchilarni ro'yxatga olish tizimini yaratish

Ro'yxatdan o'tish tizimini yaratish katta ishdir. Elektron pochta manzillarini bajaradigan kodni yozishingiz, pochta xabarlarini tasdiqlash va qolgan shakllar maydonlarini tasdiqlash va boshqa ko'p narsalarni tasdiqlovchi xabarni yozishingiz kerak.

Va bularning barchasini yozganingizdan keyin ham, foydalanuvchilar istamay Ratifikatsiya qilinadi, chunki Buning uchun ba'zi harakatlarni talab qiladi.

Ushbu darsda biz parollarni talab qilmaydigan va umuman pardalarni saqlamaydigan juda oddiy ro'yxatga olish tizimini yaratamiz! Natija o'zgartirish va mavjud PHP-saytga qo'shish oson bo'ladi. Qanday ishlashini aniqlamoqchimisiz? Quyida o'qing.



Bizning super oddiy tizimimiz qanday ishlaydi:

Biz avtorizatsiya va ro'yxatdan o'tkazish shaklini birlashtiramiz. Ushbu shaklda elektron pochta manzili va ro'yxatdan o'tish tugmachasini kiritish uchun maydon mavjud;
- Elektron pochta manzil maydonini to'ldirishda ro'yxatdan o'tish tugmasini bosish orqali yangi foydalanuvchi yaratiladi, ammo agar elektron pochta manzili ma'lumotlar bazasida topilmasa.

Shundan so'ng, foydalanuvchi tomonidan ma'lumotnoma shaklida ko'rsatilgan foydalanuvchi tomonidan ko'rsatilgan foydalanuvchi tomonidan ko'rsatilgan foydalanuvchiga yuboriladigan ma'lum bir tasodifiy noyob belgilar to'plami yaratilgan;
- Havola orqali foydalanuvchi bizning saytimizga o'tadi. Tizim belgining mavjudligini va foydalanuvchiga ruxsat berganligini aniqlaydi;

Ushbu yondashuvning afzalliklari:

Parollarni saqlash va dala tekshiruvini o'tkazishning hojati yo'q;
- Parolni, maxfiy savollarni qayta tiklashning hojati yo'q;
- Foydalanuvchi ro'yxatdan o'tgan yoki ruxsat bergan paytdan boshlab, ushbu foydalanuvchi sizning kirish joyingizda (elektron pochta manzili to'g'ri) ekanligiga amin bo'lishingiz mumkin (elektron pochta manzili to'g'ri);
- nihoyatda sodda ro'yxatga olish jarayoni;

Kamchiliklari:

Foydalanuvchi hisobining xavfsizligi. Agar kimdir pochtaga kirish huquqiga ega bo'lsa, u tizimga kirishi mumkin.
- Elektron pochta muhofaza qilinmaydi va ushlab turilishi mumkin. Shuni yodda tutingki, bu savol tegishli va parol unutilgan bo'lsa va u ma'lumot uzatish (login / parol) foydalanilmaydigan yoki avtorizatsiya tizimida yoki avtorizatsiya tizimida;
- Siz konfiguratsiyani sozlashda sizga pochta serveriga qanday ehtiyoj borligini sozlaganingizda, avtorizatsiyaga oid xabarlar spamda bo'ladi;

Bizning tizimimizning afzalliklari va kamchiliklarini taqqoslash, tizimga tizim yuqori darajada yodgorlikka ega (oxirgi foydalanuvchi uchun eng qulay) va shu bilan birga xavfsizlik ko'rsatkichlari past.

Shunday qilib, muhim ma'lumotlar bilan ishlamaydigan forumlar va xizmatlarga ro'yxatdan o'tish uchun foydalaning.

Ushbu tizimdan qanday foydalanish kerak

Agar siz tizimdan foydalanuvchilarni saytingizda avtorizatsiya qilish uchun tizimdan foydalanishingiz kerak bo'lsa va siz ushbu darsni suyaklar bilan qismlarga ajratishni xohlamaysiz, bu sizga kerak bo'lgan narsa:

Darsga biriktirilgan manbalarni yuklab olishingiz kerak
- arxivda faylni toping stollar.SQL PhpMyAdmin-da import variantidan foydalanib, uni ma'lumotlar bazangizga olib kiring. Muqobil usul: Ushbu faylni matn muharriri orqali oching, SQL so'rovini nusxalash va uni bajaring;
- Ochiq o'z ichiga / main.php. va ma'lumotlar bazangiz bilan aloqa sozlamalarini to'ldiring (bazaning uy egasi va nomi bilan aloqa qilish uchun foydalanuvchi va parolni ko'rsating). Xuddi shu faylda siz tizim tomonidan yuborilgan xabarlar uchun asl manzil sifatida foydalaniladigan elektron pochta xabarlarini belgilashingiz kerak. Ba'zi xostlar xost boshqaruv panelidan yaratilgan ushbu elektron pochta manzilini ko'rsatmagan holda, ushbu elektron pochta manzilini ko'rsatmaydi, shuning uchun haqiqiy manzilni ko'rsating;
- Barcha fayllarni yuklang index.php., himoyalangan.php. Aktivlar va mezbonlaringizga FTP orqali papkalarni o'z ichiga oladi;
- Avtorizatsiya shaklini namoyish qilishingiz kerak bo'lgan har bir PHP sahifasiga quyidagi kodni qo'shing;

Talab qiladigan_once '-ni o'z ichiga oladi / Main.php'; $ Foydalanuvchi \u003d yangi foydalanuvchi (); Agar (! Foydalanuvchi- & Gtloggedin ()) (yo'naltiruvchi ("index.php");
- Tayyor!

Qiziqqanlar uchun bularning barchasi qanday ishlaydi - quyida o'qish uchun oldinga boring!

Birinchi qadam - avtorizatsiya shaklining HTM-kodini yozish. Ushbu kod faylda joylashgan. index.php.. Ushbu faylda shuningdek, avtorizatsiya tizimining ma'lumotlari va boshqa foydali funktsiyalari mavjud bo'lgan PHP kodi mavjud. Siz ko'proq ma'lumotni PHP kodini ko'rib chiqishga bag'ishlangan bo'limda siz ko'proq ma'lumot olishingiz mumkin.

index.php.

Qo'llanma: PHP va MySQL bilan Super Oddiy ro'yxatga olish tizimi

Kirish yoki ro'yxatdan o'tish.

Yuqoridagi elektron pochta manzilingizni kiriting va biz yuboramiz
siz login aloqasi.

Bosh qismida (teglar o'rtasida) va) Men asosiy uslublarni bog'lab qo'ydim (bu darsda ular tushunmaydilar, shuning uchun siz ularni o'zingiz ko'rishingiz mumkin. Aktivlar / CSS / Style.CSS papkasida). Yopilish yorlig'iga Men JQuery kutubxonasini va biz quyida biz yozadigan JQY.JS faylini uladim.


JavaScript.

jQuery Funktsiyadan foydalanib "Restat / Verite" tugmasini bosib o'tadi e.PreventDeault () Va Ajax so'rovlarini yuboradi. Server javobiga qarab, u yoki bu xabarni ko'rsatadi va keyingi harakatlar /

aktivlar / JS / scrips.js

$ (Funktsiya () (Var Fore \u003d $ ("# Login-Restatsiya"); form.on ("Yuborish" (MARKA) ;) var-pochtamiz \u003d forc.find ("Kirish", Molecther / Corcocthinde (). $. M) (forc.addlassclasscclass ("xato"); aksessureter.Text (M.Message); "Xatretcin") ))))); $ (Hujjat) .AjaxStartt (funktsiya)); (Hujjatlar) .AjaxcyPle (funktsiya) ("yuklash" ("yuklash");)));

"Ajax" so'rovining hozirgi holatini namoyish qilish uchun shaklga qo'shildi (bu usullar tufayli mumkin bo'ldi) ajaxStart ()) I. ajaxComplution ()bu fayl oxiriga yaqinroq topishingiz mumkin).

Bu sinf spinning animatsion gif falti (so'rov qayta ishlanganligini bildirgandek), shuningdek qayta yuborish shaklini keltirib chiqaradigan bayroq sifatida ishlaydi (Ro'yxatdan o'tish tugmasi bir marta bosilganda). Sinf .Logedin. - Bu yana bir bayroq, elektron pochta xabarlari yuborilganda o'rnatiladi. Ushbu bayroq darhol shakl bilan keyingi harakatlarni to'xtatadi.

Ma'lumotlar bazasi sxemasi

Bizning sodda ro'yxatga olish tizimimiz 2 ta mysql jadvallaridan foydalanadi (SQL kodi faylda stollar.SQL). Birinchi do'konlar ma'lumotlari. Ikkinchi do'konlar kirishga urinishlar soni to'g'risida ma'lumot.


Foydalanuvchi stollari aylanmasi.

Tizim diagrammada ko'rinadigan parollardan foydalanmaydi. Siz ustunni ko'rishingiz mumkin token. ustunga yaqin tokenlar bilan token_vollik. Foydalanuvchi tizim tizimga ulangan yordamida belgi o'rnatiladi (keyingi blokda bu haqda biroz ko'proq) elektron pochta xabarlarini o'rnatadi. Ustun token_vollik 10 daqiqadan so'ng vaqtni belgilaydi, shundan keyin token tegishli bo'lishni to'xtatadi.


Avtorizatsiya qilingan urinishlar sonini ko'rib chiqadigan stol davlati.

Ikkala jadvalda ham IP-manzili butun sondagi IP2long funktsiyasidan foydalanib ishlangan shaklda saqlanadi.

Endi biz ozgina phpp kodini yozishimiz mumkin. Tizimning asosiy funktsional imkoniyatlari sinfga ishonib topshirilgan Foydalanuvchi.class.php.Siz quyida ko'rishingiz mumkin.

Ushbu sinf idor (hujjatlar) dan faol foydalanmoqda, bu kutubxonalar ma'lumotlar bazalari bilan ishlash uchun minimal darajada zarur vositalar mavjud. U ma'lumotlar bazasiga kirishni, tokenlarni generatsiya qilish va ularni tasdiqlash jarayonini qayta ishlaydi. Bu oddiy interfeys, agar u PHP-dan foydalansa, ro'yxatdan o'tish tizimini saytingizga osongina ulash imkonini beradi.

Foydalanuvchi.class.php.

Class foydalanuvchisi (// Xususiy Orm harfi. / ** * foydalanuvchi topishda foydalaniladi. Tucken ushbu vaqtdan boshlab 10 daqiqa davomida * @param stukti. Bu Siz istagan token * @/ouse statik funktsiyasi ($ token) funktsiyaning qiymatini qaytaring (//) joriy vaqtning qiymatini qaytaring va joriy vaqtning belgilarini kiriting. $ \u003d Or_tle (" REG_USERS ") -\u003e Qayerda (" Token ", token (" Token_fenlity "\u003e hozir (" Token_fenlity \u003e\u003e (! Natija) yangi foydalanuvchini qaytarish ($ ni bosing) ;) / ** * avtorizatsiya qiling yoki ro'yxatdan o'ting yoki ro'yxatdan o'ting. Custom elektron pochta manzili * @ imonnn foydalanuvchi manzili ($ elektron pochta manzili) (// foydalanuvchi mavjud bo'lsa, foydalanuvchi funktsiyasining qiymatini qaytaring Ma'lumotlar bazasida saqlangan ko'rsatilgan elektron pochta manzilidan ($ elektron pochta) ($ elektron pochta) ($ elektron pochta);) yangi foydalanuvchini yarating Ma'lumotlar bazasida televizor va funktsiyaning qiymatini qaytarish Foydalanuvchi :: Belgilangan elektron pochtadan qaytish foydalanuvchisi :: ni yaratish ($ elektron pochta); ) / ** * * Yangi foydalanuvchini yarating va ma'lumotlar bazasiga * @param string $ elektron pochta manziliga yuboring. Foydalanuvchi elektron pochta manzili * / Xususiy statik funktsiya ($ elektron pochta) (// Foydalanuvchi funktsiyasi (// Foydalanuvchi funktsiyasini ushbu qiymatlardan qaytaring va foydalanuvchi funktsiyasini ushbu qiymatlardan qaytaring. \u003e Yaratish (); $ 1-pochta \u003d $ elektron pochta; $ (Natija); Yangi foydalanuvchini qaytarish ($); Yangi foydalanuvchini qaytarish va o'zgaruvchini qaytarib berishni tekshiring O'zgaruvchan * @param string $ elektron pochta. Maxsus elektron pochta manzili * / jamoat statik funktsiyasi mavjud ($ elektron pochta) (// Ma'lumotlar bazasida foydalanuvchi mavjud: "REG_USSERS") -\u003e Qayerda ("REG_USSER") ) -\u003e Hisoblash (); $ 1; 1%; Parcaram MERM, ID, elektron pochta funktsiyasi __cravecrul (parametr \u003d null) (agar ($ paramdagi misol) (// Orm Tekshiri) $ ($ param)) ($ param)) ($ param)) ($ param)) ($ param)) ($ param)) ($ param)) bo'lsa, ($ param)) ($ param)) ($ param)) ($ param)). for_table ("REG_USERS") -\u003e Find_one () ($ id) ($ id)) ($ identifikator) (/ $ identifikator) qiymatga uzatiladi) $ paramli identifikatori \u003d $ param; ($ _ sessiya) ("LOGINED"] ("LOGDED"]; "LOGINED"]; "LOGINED"]; Sessiyani ko'ring \u003d Orm :: uchun: "REG_USERS") -\u003e Qayerda ("ID", $ identifikator, $ () yangi Sha1 avtorizatsiya tokenini yarating, yozadi Ma'lumotlar bazasida va uning qiymatini qaytaradi * @//cance \u003d SHA1 ($ bu- elektron pochta manziliga) ni yaratadi (/ ushbu- elektron pochta manzilini saqlang. RAND (0 , 1000000)); // ma'lumotlar bazasida saqlang // va uni faqat keyingi 10-sonli 10 taga tegishli deb belgilang ("token" ("token", token); $ bu-\u003e Orm-\u003e set_expr ("Token_fitlik", "Qo'shimcha (hozirgi ()," 0:10 ")"); $ bu-\u003e Om-\u003e Savol (); $ Tokenni qaytaring; ) / ** * Foydalanuvchi * @/gnid "Vazifasi $ _Siscy [" LOGINED "] \u003d $. // qiymatini tekshiring oxirgi_login bazasi maydoni $ bu-\u003e Om-\u003e set_expr ("So'nggi_login", "Endi () -\u003e ORM-\u003e) / ** * Sessiyani yo'q qiling va foydalanuvchi * @ @ garetornni ajrating bo'sh * / jamoat funktsiyasi LOGOUC ($ _Sesasce \u003d Caslay (). Boolean * / Jamoatchilik funktsiyasini kiritish uchun * **. Bu-\u003e orm-\u003e id) && loginsi "] \u003d\u003d $ bu-\u003e - bu Foydalanuvchi ma'muri * @ Odatiy Boolean * / Jamoatchilik funktsiyasi ISADMIN () $ bu-\u003e Rank () \u003d \u003d "Ma'mur";) / ** * yoki oddiy * / ommaviy funktsiya strelkasi (agar (agar ($ ($ ($ ($ ($ ($ ($) darajadagi »yoki oddiy funktsiyani toping \u003d\u003d 1) (qaytish "administrator";) "muntazam";) / ** * usul shaxsiy ma'lumot olishingizga imkon beradi Foydalanuvchi hisobidagi foydalanuvchi * @param string $ comective Mulk * / Jamoatning Aralash funktsiyasi __Get ($ ($ tugmasi) $ bu-\u003e Orm -\u003e $ tugmasi; ) Nolni qaytarish; )))

Tokenlar Sha1 algoritmidan foydalanib, ma'lumotlar bazasida saqlanadi. Men 10 daqiqalik tokenyning dolzarbligini o'zgartirish uchun MySQL vaqt funktsiyalaridan foydalanaman.

Token tekshiruv tartibini o'tkazganda, biz to'g'ridan-to'g'ri ishlov beruvchidan bevosita gaplashamiz, chunki biz uning muddati tugamaydigan tokenlarni hisobga olmaganda, tenkodiyon ustunida saqlanadi.

E'tibor bering, men sehrli usuldan foydalanaman __get. FAQAT BUYURTMA KUTUBXONALARI FAQAT OG'IRLASH FOYDALANISh UChUN FOYDALANISh UChUN FOYDALANISh UChUN.

Shu sababli, xususiyatlar tufayli ma'lumotlar bazasida saqlanadigan ma'lumotlarga kirish mumkin $ Foydalanuvchi-\u003e Elektron pochta, $ foydalanuvchi-\u003e token va boshqalar. Quyidagi kod parchasida, ushbu sinflardan qanday foydalanish kerakligini o'ylab ko'ring.


Himoyalangan sahifada

Foydali va zarur funktsiyalarni saqlaydigan boshqa fayl - bu fayl. funktsiya .php.. Boshqa fayllarda toza va o'qiladigan kodni yaratishga imkon beradigan yordamchi yordamchilar mavjud.

funktsiya .php.

Funktsiya Send_email ($ bu $ $ bu $ 1,0) (/ MIME-versiyasi). "MIME-versiyasi: 1.0"; sarlavhalar turi. \u003d "Tarkib turlari: matn / Oddiy; charset \u003d UTF-8 "." \\ R \\ n ";" \\ r \\ n ";" \\ r \\ n "; $, $, $ xabari, $ );) Funktsiyasi get_page_url (// AQSh PHP fayl URL manzilini aniqlang \u003d ': "HTTPS"]. ": //" $ _ server ["Server_name"]; agar ($ _ Server ["so'rov_uri"]); \u003d "so'rov_uri"] ($ ulang) ["so'rov_uti"]; "URL manzili . \u003d $ _Server ["Path_info"] Aktsiya RATE_LIMIT ($ IP, $ comme) ($ IP, $ comme) ($ IP-manzil) $ oxirgi soatlar soni $ Count_hour \u003d Orm: For_Table ("RR_LOGIN_RATFID") -\u003e "% U", IP2Long ($ IP)), IP2long ($ IP)) ) ") -\u003e Hisoblash () hisoblash (). // So'nggi 10 daqiqada ushbu IP-manzilning soni $ 1:" REG_LOGIN_ROTIFT "(" RR_LOGIN_TYFID ") -\u003e Qayerda (" IP ", Sprint f ("% U", IP2LONT ($ IP))) -\u003e Hozir ("0:10") "" "," Hisoblash (); Agar ($ scup_hour\u003e $ citch_hour || $ CREC_10_MIN) ("Kirish istisno" ($ IP, $ elektron) funktsiyasi (/ $ IP, $ elektron) funktsiyasi Kirish sonini hisoblab chiqadi - login_atting login_atty ("Requ_login_thittf" ("REG_LOGIN_TYFIFT" ("RR_LOPINFIFT" ("% U", IP2long ($ IP Funktsiyani qayta yo'naltirish ($ url: $ 'URL); Chiqish;

Vazifalar rate_limit. va rate_limit_tick. Ulardan keyin birinchi urinishda muddati tugagan vaqtincha avtorizatsiya qilingan urinishlar soni. Kirish urinishi reg_login_testary ustunidagi ma'lumotlar bazasida qayd etiladi. Ushbu funktsiyalar keyingi kod parchasidan ko'rinib turibdiki, shaklni qayta ishlash va yuborish paytida chaqiriladi.

Kod quyidagi fayldan olinadi. index.php. Va u shaklni yuborish jarayonini qayta ishlaydi. Bu JSSson javobini qaytaradi, bu esa o'z navbatida JQuery tomonidan qayta ishlanadi aktivlar / JS / scrips.jsilgari ilgari ajratganmiz.

index.php.

Urinib ko'ring (agar ($ _ post) && Server ["Http_x_requited_" Server ["Tarkib turkumi:" Tarkib turkumi "sarlavhasi (" Conent-Hone "sarlavhasi); // bu elektron pochta manzili (! $ _ Post ["Elektron pochta] (" Elektron pochta] ("Elektron pochta"], Filtr_validate_eil), Filtr_validate_eail), faylni kiriting ("Iltimos, to'g'ri elektron pochta xabarini kiriting";) . Foydalanuvchi kirishga ruxsat berilsa, ruxsat etilgan ulanishlar sonidan farq qiladimi? ("Rimote_ADDDDR"]) RATE_LILIMIT ("Rimote_ADDDDR"]) RATICE_LIMIT_TICKga ruxsat berish ($ _ Server ["Rimote_ADDDR"], $ _post ["Elektron pochta"]). Foydalanuvchi xabari \u003d '";" Elektron pochta "];" Elektron pochtangiz "]; $ mavzusi \u003d" Kirish havolasi " ; if (! Foydalanuvchi: $ elektron pochta) ($ mavzusi) ($ mavzusi) ($). $ \u003d "Bizning saytimizda ro'yxatdan o'tganingiz uchun rahmat! \\ n \\ n" ;/ avtorizatsiya qilish yoki Foydalanuvchi $ foydalanuvchisi \u003d Foydalanuvchi :: LOGOGRASTER ($ _ post ["Elektron pochta"]); $ xabarnoma. \u003d "Siz ushbu URL manzilidan kira olasizmi: \\ n" ; $ xabari. \u003d Conc_page_url (). "? TKK \u003d". $ -\u003e generatetik (). "\\ n \\ n"; $ Xabar. \u003d "10 daqiqadan so'ng havola avtomatik ravishda tugaydi."; $ natijasi \u003d Yubor_email, $ _post ["Elektron pochta"], $ Mavzu, $ xabari); Agar (! 1-avasta) bo'lsa ("E-pochtangizni yuborishda xatolik yuz berdi. Iltimos, urinib ko'ring (Jon_encode (" Xabar "\u003d" Rahmat! Biz havolani yuboramiz Kirish qutingizga. Spam papkangizni tekshiring.)) Tutib olish (Jon_encode (JSSON_USTROD (Maslahat (xato »\u003d\u003e 1\u003e $ ecmessage ())))))

Muvaffaqiyatli avtorizatsiya / ro'yxatdan o'tish kodidan so'ng foydalanuvchi foydalanuvchiga avtorizatsiyaga havolani yuboradi. Token arzonlashadi, chunki U yaratilgan havolanish usulida o'zgaruvchan sifatida uzatiladi $ _Get. Tn v marker bilan

index.php.

Agar (ISSSE ($ _ ni ["TNK"] avtorizatsiya qilish uchun haqiqiy emasmi? $ Foydalanuvchi \u003d: Findbytoken ("TNK"] Ha, bu $ foydalanuvchi -\u003e Kirish () himoyalangan sahifaga yo'naltirish uchun. REARIRECT ("Himoyalangan.php"); qayta yo'naltirishni avtorizatsiya qilish / ro'yxatdan o'tkazish ("index.php"););)

$ Foydalanuvchi-\u003e Login ()

seans uchun kerakli o'zgaruvchilarni yarating, shunda foydalanuvchi keyingi sahifalarni ko'rib chiqing, har doim ham ruxsat etiladi.

Shunga o'xshab, tizimdan chiqish uchun funktsiyani qayta ishlash ham tartibga solinadi.

index.php.

Agar (Issiqlik ($ _ olish))) ($ Foydalanuvchi \u003d yangi foydalanuvchi)) ($ Foydalanuvchi-\u003e Loggedin ()) ($ Foydalanuvchi-\u003e Loggedin ());) yo'naltirish ("index.php") ););)

Kodeksning oxirida men yana indeks.php-ga yo'naltiraman, shu bilan parametr ! Logout \u003d 1 URL tomonidan talab qilinmaydi.

Bizning faylimiz. index.php. Qo'shish kerak. Himoya - Biz tizimga kirgan odamlar ro'yxatga kiritilgan odamlarni yana ro'yxatga olishini istamasligimiz kerak. Ushbu maqsadlar uchun biz usuldan foydalanamiz $ Foydalanuvchi-\u003e Logredin ().

index.php.

$ Foydalanuvchi \u003d yangi foydalanuvchi (); Agar ($ foydalanuvchi-\u003e Loggedin ()) (yo'naltiruvchi ("himoyalangan.php");)

Va nihoyat, bu sizning saytingiz sahifalaringizni himoya qilish va uni faqat avtorizatsiyadan keyin amalga oshirishga imkon beradigan kodning bir qismi.

himoyalangan.php.

// Har bir sahifani saytingizdagi har bir sahifani himoya qilish uchun faylni ulang //// Main.Php va yangi foydalanuvchi ob'ektini yarating. Bu juda oson! Talab qiladigan_once '-ni o'z ichiga oladi / Main.php'; $ Foydalanuvchi \u003d yangi foydalanuvchi (); Agar (! Foydalanuvchi-\u003e Loggedin ()) (yo'naltirish ("index.php");

Ushbu chekdan so'ng siz foydalanuvchi muvaffaqiyatli vakolatga ega ekanligiga amin bo'lishingiz mumkin. Siz ma'lumotlar bazasida ob'ekt xususiyatlaridan foydalangan holda ma'lumotlar bazasida foydalanishingiz mumkin. $ Foydalanuvchi.. Elektron pochta va foydalanuvchi va uning holatini ko'rsatish uchun ushbu kodni ishlating:

Echo "Sizning elektron pochtangiz:" $ foydalanuvchi-\u003e Elektron pochta; Echo "Sizning martabangiz:" $ Foydalanuvchi-\u003e Rank ();

Usul rank () Bu erda ishlatilgan, chunki ma'lumotlar bazasi odatda saqlanadi (Ma'mur uchun 1 uchun 0) va biz ushbu ma'lumotlarni ular bizga tegishli bo'lgan holatlarga almashtirishimiz va bu usul yordam beradi.

Doimiy foydalanuvchidan ma'mur qilish uchun shunchaki foydalanuvchi arizasini phpMyAdmin (yoki ma'lumotlar bazalarini boshqarish imkonini beradigan boshqa dastur) orqali tahrirlash. Administrator maqomi hech qanday imtiyoz bermaydi, bu misolda siz ma'mursiz, va bu shunday.

Ammo bu bilan nima qilish kerak - bu sizning ixtiyoriyligingizda qoladi, siz o'z xohish-irodasini yozishingiz va yozib qo'yadigan kodni yaratishingiz mumkin.

Biz tugadik!

Ushbu ajoyib super kvazining oddiy shaklida biz tugadik! Siz uni PHP saytlarida ishlatishingiz mumkin, bu etarli. Shuningdek, siz uni o'zingiz ham o'zingiz ham o'zgartirishingiz va xohlaganingiz kabi qilishingiz mumkin.

Sayt saytida maxsus tayyorlangan denis chaqaloq

P.S. PHP va OOPni o'zlashtirishda davom etmoqchimisiz? Sayt binolari, shu jumladan PHP dasturlarini o'z ichiga olgan holda, shuningdek, PHP-da PHP-da PHP-da PHP-da PHP tizimini o'chirish bo'yicha bepul darslarga e'tibor bering:

Sizga material yoqdimi va minnatdorchilikni xohlaysizmi?
Do'stlar va hamkasblaringiz bilan bo'lishing!


1. Mahsulotlar bazasida tizimga kirishni boshdan boshlaymiz. Unda foydalanuvchi ma'lumotlari (login va parol) bo'ladi. PhpMyAdmin-ga boraylik (agar siz kompyuteringizda ma'lumotlar bazasini yaratsangiz http: // lokalhhost / phpMyAdmin /). Stol yaratish foydalanuvchilar.U 3 ta sohaga ega bo'ladi.

Men uni MySQL ma'lumotlar bazasida yarataman, siz boshqa ma'lumotlar bazasida yaratishingiz mumkin. Keyin rasmda bo'lgan qiymatlarni o'rnating:

Ni bosing " Tejash"Shunday qilib, bizda stol bor.
2. Ushbu jadvalga ulanish kerak. Keling, fayl yaratamiz bd.php.. Uning mazmuni:

Mening holatimda u shunday ko'rinadi:

Bd.php-ni saqlang.
Zo'r! Bizda ma'lumotlar bazasida stol bor, unga ulanish. Endi foydalanuvchi o'z ma'lumotlarini qoldiradigan sahifani yaratishni boshlashingiz mumkin.
3. Fayl yarating reg.php. Tarkibi bilan (ichidagi barcha sharhlar):
belgilanish

belgilanish


4. Ma'lumotlar bazasiga ma'lumotlarni taqdim etadigan va foydalanuvchini saqlaydigan fayl yarating. Tejang_user.php.(Ichkarida sharhlar):

5. Endi bizning foydalanuvchilarimiz ro'yxatdan o'tishlari mumkin! Keyinchalik, siz allaqachon ro'yxatdan o'tgan foydalanuvchilar saytiga kirish uchun "eshik" ni qo'yishingiz kerak. index.php. (Ichkarida sharhlar):
Bosh sahifa

Bosh sahifa


Ro'yxatga olmoq


";) Boshqa (// Agar bo'sh bo'lmasa, biz Echo havolasini namoyish etamiz», dedi. '$ _ Kirish "[" Kirish "]."
Ushbu havola faqat ro'yxatdan o'tgan foydalanuvchilar uchun mavjud ";)?\u003e
Faylda index.php. Biz faqat ro'yxatdan o'tgan foydalanuvchilar uchun ochiq bo'lgan ma'lumotnomani olib tashlaymiz. Bu skriptning butun mohiyati - har qanday ma'lumotlarga kirishni cheklash.
6. Kiritilgan login va parolni tekshirish bilan fayl bo'lib qoldi. TestReg.php. (Ichkarida sharhlar):

Bo'ldi shu! Ehtimol, saboq va zerikarli, ammo juda foydali. Bu erda faqat ro'yxatdan o'tish g'oyasi ko'rsatilgan: Himoya, dizayn, ma'lumotlar bilan, avatarlarni yuklash, avatarlarni yuklash, avatarlarni yuklash (bu uchun faqat funktsiyalar bilan o'zgaruvchilarni yo'q qiling) olib tashlanmaydigan.) va boshqalar. Omad!

Men hamma narsani tekshirdim, yaxshi ishlaydi!

Salom, ushbu o'quv qo'llanmadagi do'stlar, biz PHP saqlangan protsedurasi yordamida foydalanuvchilarni ro'yxatga olish va kirishdan o'rganamiz.
Ushbu darslik uchun fayl tuzilishi
Config.php.
index.php.
Chek_avellik.php.
Login.php.
Xush kelibsiz.php.
logout.php.
SQL jadval tabrgnatiy tuzilmasi

"TBBoto" stolini yaratish (Int (11) nol emas (200) nol emas (200) nol emas (200) NOLL, "RegDet" Vararxi NULL-ni o'chirib tashlamaydi joriy_timetamp) dvigatel \u003d innostb standart narx \u003d lotin1;

config.php.

MySqli kengaytmasidan foydalanib DB konfiguratsiyasini yarating. Konfiguratsiya bo'yicha hisob ma'lumotlarini taqdim eting

index.php.

Uperni ro'yxatdan o'tkazish uchun HTML shaklini yarating.

Ro'yxatga olmoq

Allaqachon ro'yxatdan o'tgan. Kirish.

Foydalanuvchi elektron pochta xabarlari uchun JQuerer / Ajax

chek_avellik.php.

Ushbu sahifada biz foydalanuvchi elektron pochta manzilini tekshiramiz. Nomni tekshirishning mavjudligi bilan do'kon tartibini yarating
Do'kon protsedura kodi:

Delimiter $ BU MUSTAHABINI TARTIBI (255) TBLREMS-dan (255)) CQL-ni tanlang.

Endi foydalanuvchilarni ro'yxatga olish uchun do'kon tartibini yarating.
Foydalanuvchilarni ro'yxatga olish tartibi

Delimiter $ Kichik (200), "Frants" (200), "Parol" (255)), "Parol" (255)) indomer '(255)) indomer-ni (255)) yarating. To'liqame, elektron pochta manziliga, parol) Qunishlar (fname, elektron pochta manzili, parol) $ a difmier;

Do'kon tartibini yaratgandan so'ng do'kon protsedurasini amalga oshiradi.

"; Aks sado""; } } ?>

Bu erda ro'yxatdan o'tish uchun yozgan to'liq kod ( index.php.):

alert("Registration Successfull");"; Aks sado""; } } ?> Do'kon tartibi yordamida ro'yxatdan o'tish

Ro'yxatga olmoq

Allaqachon ro'yxatdan o'tgan. Kirish.

kirish .Php.

Kirish formasini yarating Foydalanuvchilar Kirish.

Endi tizimga kirish uchun do'kon rejasini tuzing.
Kirish do'koni tartibi:

Demariter $ Kinsozlik (255), CQL-dan elektron pochta manziliga (255)) SQL-ni tanlang. $ Animater;

Endi kirish do'konining protsedurasini bajaring

"$ Qo'shimcha \u003d" Login.PP ";)?\u003e

Bu erda biz login uchun yozgan to'liq kod ( login.php.):

0) ($ _Sesessiya ["Kirish"] \u003d $ _ post ["Mansert"]]; "Kirish"] \u003d $ "Kirish"] ; echo ""; $ qo'shimcha \u003d" login.php ";))?\u003e Sasa Kirish do'konining protsedurasi.

xush kelibsiz.php.

Kirishdan keyin foydalanuvchi xush kelibsiz deb qayta yo'naltiriladi.Php. Agar foydalanuvchi to'g'ridan-to'g'ri ushbu sahifaga (xush kelibsiz xush kelibsiz) kirishga harakat qilsa, ushbu sahifani tasdiqlaydi. Keyin foydalanuvchi login.ph sahifasiga yo'naltiriladi.

Xush kelibsiz sahifasi

Xush kelibsiz:

Chiqish.

logout.php.

Kirish sonini yo'q qilish uchun. Seans_destroy barcha faol mashg'ulotlarni yo'q qiladi.

Ro'yxatdan o'tish tizimini yaratish jarayoni juda ko'p ish hisoblanadi. Elektron pochta manzillari haqiqiyligini ko'rsatgan kodni yozgan kodni yozishingiz kerak, uni tasdiqlash bilan yuborilgan, parolni tiklash imkoniyatini taqdim etdingiz, u parolni xavfsiz joyda saqlab, tekshirib ko'rilgan shaklda saqlanadi va ko'proq tekshiriladi. Agar siz buni qilsangiz ham, foydalanuvchilar o'z faoliyatini talab qilib, hatto eng kam ro'yxatdan o'tishni talab qiladilar.

Bugungi qo'llanmada biz oddiy ro'yxatga olish tizimini ishlab chiqamiz, ular sizga hech qanday parol kerak bo'lmaydi! Biz natijalarni olamiz, osongina o'zgartirilishi yoki mavjud PHP manziliga kiritilishi mumkin bo'lgan tizimni olamiz. Agar qiziqsangiz, o'qishni davom ettiring.

PHP.

Endi biz PHP kodini qilishga tayyormiz. Ro'yxatdan o'tish tizimining asosiy funktsional imkoniyatlari siz quyida ko'rishingiz mumkin bo'lgan foydalanuvchi sinfi tomonidan taqdim etiladi. Ma'lumotlar bazalari bilan ishlash uchun minimalist kutubxona hisoblanadi (). Foydalanuvchi sinfi ma'lumotlar bazalariga kirish uchun javobgardir, ularni login va ularni tasdiqlash uchun. Bu bizga PHP asosida ro'yxatga olish tizimiga osongina kiritilishi mumkin bo'lgan oddiy interfeysni anglatadi.

Foydalanuvchi.class.php.

// Xususiy Orm misol
Xususiy $ orm;

/**
* Foydalanuvchini tokenli satr orqali toping. Faqat haqiqiy tokenlar qabul qilinadi
* Ko'rib chiqish. Belgilanganidan keyin token 10 minut davomida amal qiladi.
* @ param stukti $ tokenni qidirish uchun token
* @NETORN foydalanuvchi.
*/

Jahon statik funktsiyasi FindbyTenoken ($ token) (

// uni ma'lumotlar bazasida toping va Vaqtingiz to'g'ri ekanligiga ishonch hosil qiling


-\u003e qayerda ("token", token)
-\u003e qayerda_ren ("token_fenlesse\u003e")
-\u003e Find_one ();

Agar (! $ Natija) bo'lsa (
Qaytish noto'g'ri;
}

Yangi foydalanuvchini qaytaring ($ natija);
}

/**
* Yoki foydalanuvchini ro'yxatdan o'tkazing yoki ro'yxatdan o'ting.
* @NETORN foydalanuvchi.
*/

YigirmaTorraster jamoat statik funktsiyasi ($ elektron pochta) (

// Agar bunday foydalanuvchi allaqachon mavjud bo'lsa, uni qaytaring

If (foydalanuvchi :: dam mavjud ($ elektron pochta)) (
Yangi foydalanuvchini qaytaring ($ elektron pochta);
}

// aks holda uni yarating va uni qaytaring

Qaytish Foydalanuvchi :: ni yaratish ($ elektron pochta);
}

/**
* Yangi foydalanuvchini yarating va uni ma'lumotlar bazasiga saqlang
* @Param string $ bepul foydalanuvchi "E-elektron pochta manzili
* @NETORN foydalanuvchi.
*/

Xususiy statik funktsiya yaratish ($ elektron pochta) (

// Yangi foydalanuvchi ma'lumotlar bazasiga yozing va uni qaytaring

$ Natija \u003d Orm :: for_table ("REG_USERS") -\u003e Yaratish () yaratish ();
$ natija -\u003e Elektron pochta \u003d $ elektron pochta;
$ Natija -\u003e Saqlash ();

Yangi foydalanuvchini qaytaring ($ natija);
}

/**
* Bunday foydalanuvchi ma'lumotlar bazasida mavjudligini tekshiring va Booleanni qaytaring.
* @Param string $ bepul foydalanuvchi "E-elektron pochta manzili
* @ Boolean
*/

Jamoat statik funktsiyasi mavjud ($ elektron pochta) (

// Foydalanuvchi ma'lumotlar bazasida mavjudmi?
$ natija \u003d Orm :: for_tle ("rest_users")
-\u003e qayerda ("elektron pochta", $ elektron pochta xabarlari)
-\u003e Hisoblash ();

$ 1.\u003d 1 daromadni qaytaring;
}

/**
* Yangi foydalanuvchi ob'ektini yarating
* @param $ param yoki null
* @NETORN foydalanuvchi.
*/

Jamoat funktsiyasi __crodstrodruct ($ param \u003d null) (

Agar ($ param 7) bo'lsa (

// orm namunasi qabul qilindi
$ bu-\u003e Orm \u003d $ Partiyasi;
}
Boshqa if ($ param)) ($ param)) (

// elektron pochta orqali yuborildi
$ bu-\u003e
-\u003e qayerda ("elektron pochta", $ Partiyasi)
-\u003e Find_one ();
}
Boshqa (

If (isy_numererik ($ param)) (
// foydalanuvchi identifikatori parametr sifatida qabul qilindi
$ id \u003d $ param;
}
Boshqa if (Issiqlik ($ _ sessiya) ["LOGINED"])) (

// foydalanuvchi identifikatori qabul qilinmaydi, seone-ga qarang
$ id \u003d $ _Sesasce ["Kirishdi"];
}

$ bu-\u003e Orm \u003d Orm \u003d For_Table ("REG_Users")
-\u003e qayerda ("id", $ idingiz)
-\u003e Find_one ();
}

/**
* Yangi Sha1 login tokenini yaratadi, uni ma'lumotlar bazasiga yozadi va qaytaradi.
* @ trürizn satr.
*/

Jamoat funktsiyasi aveneritenoken () () ()
// Tizimga kirgan foydalanuvchi uchun tokenni yarating. Uni ma'lumotlar bazasiga saqlang.

$ token \u003d sha1 ($ bu -\u003e elektron pochta manzillari.time (). RAND (0, 1000000);

// Ma'lumotlar bazasiga tokenni saqlang
// uni faqat keyingi 10 daqiqada haqiqiy deb belgilang

$ bu-\u003e Om-\u003e Set ("token", token);
$ bu-\u003e Orm-\u003e set_expr ("Token_fitlik", "Qo'shimcha (hozirgi ()," 0:10 ")");
$ bu-\u003e Om-\u003e Savol ();

$ Tokenni qaytaring;
}

/**
* Ushbu foydalanuvchiga kiring
* @ bekor qiling
*/

Jamoat funktsiyasi Kirish () ()

// foydalanuvchini tizimga kirgan holda belgilang
$ _Sesasce ["LOGINED"] \u003d $ bu-\u003e Orm-\u003e ID;

// oxirgi_login db maydonini yangilang
$ bu-\u003e Orm-\u003e set_expr ("oxirgi_login", "hozir ()»);
$ bu-\u003e Om-\u003e Savol ();
}

/**
* Sessiyani yo'q qiling va foydalanuvchiga kiring.
* @ bekor qiling
*/

Jamoat funktsiyasini lout () ()
$ _Sesasce \u003d massiv ();
Pusiz ($ _ sessiyasi);
}

/**
* Foydalanuvchi tizimga kirganligini tekshiring.
* @ Boolean
*/

Jamoat funktsiyasi tizimga kirgan () () ()
Qaytish Issiq ($ bu-\u003e\u003e yoki $ _Sesasce ["LOGINED"] \u003d\u003d $ bu-\u003e
}

/**
* Foydalanuvchi ma'mur ekanligini tekshiring
* @ Boolean
*/

Jamoat funktsiyasi ISADmin () (
$ Bu-\u003e Rank () \u003d\u003d "Admoristrator" ni qaytaring;
}

/**
* Foydalanuvchi turini toping. Bu ma'mur yoki muntazam bo'lishi mumkin.
* @ trürizn satr.
*/

Jamoat funktsiyasi () () ()
Agar ($ bu-\u003e\u003e lik reytm \u003d\u003d 1) (
"Ma'mur" qaytish;
}

"Doimiy" qaytish;
}

/**
* Xususiyning elementlariga kirish uchun sehrli usuli
* $ Orm instantsiyasi foydalanuvchi ob'ekti xususiyatlari sifatida
* @Param string $ kaliti Kirish xususiyati
* aralashtiriladi
*/

Jamoat funktsiyasi __Get ($ tugma) (
If (ISSSET ($ bu-\u003e Orm -\u003e $ tugmasi))) (
$ Bu-\u003e Orm -\u003e $ tugmasi;
}

Nolni qaytaring;
}
}
Token-slar algoritm tomonidan yaratiladi va ma'lumotlar bazasida saqlanadi. Biz MySQL-dan 10 daqiqaga teng qiymatni belgilash uchun MySQL-dan foydalanamiz. Tasdiqlash tyonida biz token kerak bo'lgan motorga xabar qilamiz, token_vollik maydoni hali tugamadi. Shunday qilib, biz Thenning amal qilish vaqtini cheklaymiz.

Shuni esda tutingki, biz foydalanuvchi ob'ekti xususiyatlariga kirish uchun hujjat oxirida Sehrli usuldan foydalanamiz. Bu bizga ma'lumotlar bazasida ishlatiladigan ma'lumotlarga kirishga imkon beradi: $ yoki elektron pochta, $ foydalanuvchi-\u003e token. Masalan, keling, ushbu sinfdan quyidagi kodlardan foydalanishimiz mumkinligini ko'rib chiqaylik:


Kerakli funksiyalar saqlanadigan boshqa fayl funktsiya .ph. U erda bizda qolgan kodni yanada toza tutishimizga imkon beradigan bir nechta yordamchi funktsiyalar mavjud.

Funktsiya .php.

Funktsiya Yubor_email ($ bu $ bu $ $, $ xabari) (

// elektron pochta xabarini yuborish uchun yordamchi ishlaydi

$ Sarlavhalar \u003d "Mime-versiyasi: 1.0". "\\ r \\ n";
$ Sarlavhalar. \u003d "Tarkib turi: matn / oddiy; charset \u003d Utf-8". "\\ r \\ n";
$ Sarlavhalar. \u003d ":" Dan. "\\ r \\ n";

Qayta qaytarish ($ uchun $ manzil, $ xabari, $ Speriya);
}

funktsiyasi get_page_url () ()

// php faylining URL manzilini toping

$ url \u003d "HTTP"

Agar (Ismet ($ _ server ["so'rov_uri"]) && $ _Server ["so'rov_uri"]! \u003d "") (
$ Url. \u003d $ _Server ["so'rov_usi"];
}
Boshqa (
$ Url. \u003d $ _Server ["Pat_info"];
}

$ Url URL manzilini qaytaring;
}

funktsiya Rate_limit ($ com, $ comme_hour \u003d 20, $ imm_10_min \u003d 10) (

// Ushbu IP manziliga oxirgi soatga kirish urinishlari soni

$ Count_hour \u003d orm :: for_tle ("rest_login_tited")
->
-\u003e qayerda_raw ("TS\u003e Subme (hozir ()," 1:00 ")")
-\u003e Hisoblash ();

// So'nggi 10 daqiqaga kirish urinishlari soni ushbu IP manzil bilan

$ Sce_10_min \u003d Orm :: for_table ("reg_login_tited")
-\u003e qayerda ("IP", Sprintf ("% U", IP2long ($ IP))))
-\u003e qayerda_raw ("TS\u003e Subme (hozir ()," 0:10 ")")
-\u003e Hisoblash ();

Agar ($ slection_hour\u003e $ cime_hour || $ count_10_min\u003e $ limit_10_min) (
Yangi istisno ("Kirish urinishlari juda ko'p!");
}
}

funktsiya stavkasi_limit_tick ($ IP, $ elektron pochta) (

// Kirish urinish jadvalida yangi rekordni yarating

$ login_atty \u003d Orm :: uchun ("rest_login_titfty") -\u003e Yaratish () yaratish ();

$ login_atged-\u003e Elektron pochta \u003d $ elektron pochta;
$ login_atged-\u003e IP \u003d Sprintf ("% U", IP2long ($ IP));

$ login_atgiya -\u003e saqlagich ();
}

funktsiya yo'naltirish ($ url) (
Sarlavha ("Manzil: $ url");
Chiqish;
}
Rate_limit va Rate_limit_tick funktsiyalari ma'lum vaqt davomida avtorizatsiya qilingan urinishlar sonini cheklashga imkon beradi. Avtorizatsiya orqali qilingan urinishlar rest_login_atfsiz ma'lumotlar bazasida qayd etiladi. Ushbu funktsiyalar avtorizatsiya shaklini tasdiqlashda boshlanadi, chunki quyidagi kod parchasini ko'rish mumkin.

Quyidagi kod index.php va avtorizatsiya shaklini tasdiqlash uchun javobgardir. Bu JQuery kodi tomonidan boshqariladigan JQeyer kodi tomonidan boshqariladigan JQeyer kodi tomonidan boshqariladigan javobni qaytaradi.

index.php.

If (! Bo'sh ($ _ post) && Server ["htp_x_requited_ bilan"]

// json sarlavhasini chiqaring

Sarlavha ("Tarkib turi: ariza / JSON");

// elektron pochta manzili haqiqiymi?

Agar (! $ _ Post ["Elektron pochta]] ||! Filtr_Var (" Elektron pochta "], Filtr_Validat_email) (
Yangi istisno ("To'g'ri elektron pochta xabarini kiriting";
}

// Yuqoridagi odam bo'lsa, bu istisno tashlaydi
// Tasli kirish urinish cheklovlari (funktsiyas.php-ni ko'proq uchun ko'ring):
Rate_limit ($ _ server ["Rimote_ADDDR"];

// bu kirish urinishni qayd eting
State_limit_tick ($ _ server ["Rimote_ADDDR"], $ _post ["Elektron pochta"]);

// xabarni foydalanuvchiga yuboring

$ xabaringiz \u003d "";
$ elektron pochta \u003d $ _post ["elektron pochta"];
$ mavzusi \u003d "Sizning kirish havolasi";

If (! Foydalanuvchi :: mavjud ($ elektron pochta)) (
$ Mavzu \u003d "Ro'yxatdan o'tkazganingiz uchun rahmat!";
$ Celle \u003d "Bizning saytimizda ro'yxatdan o'tganingiz uchun rahmat! \\ N \\ n";
}

// tizimga kirish yoki ro'yxatdan o'tishga urinish
$ Foydalanuvchi \u003d Foydalanuvchi: KirishBoRater ($ _ post ["elektron pochta"]);

$ Xabari. \u003d "Siz ushbu URL manzilidan kira olasiz: \\ n";
$ xabari. \u003d Conc_page_url (). "? TKK \u003d". $ -\u003e generatetik (). "\\ n \\ n";

$ Xabar. \u003d "10 daqiqadan so'ng havola avtomatik ravishda tugaydi.";

$ natijasi \u003d Yubor_email, $ _post ["Elektron pochta"], $ Mavzu, $ xabari);

Agar (! $ Natija) bo'lsa (
Yangi istisno ("Sizning elektron pochtangizni yuborishda xatolik yuz berdi. Iltimos, yana urinib ko'ring.");
}

O'ling (json_ence-kod (massiv) (
"Xabar" \u003d\u003e "Rahmat! Biz sizning kirish qutingizga havolani yuboramiz. Spam papkangizni ham tekshiring. "
)));
}
}
ushlash (istisno $ e) (

O'ling (json_ence-kod (massiv) (
"Xato" \u003d\u003e 1,
"Xabar" \u003d\u003e $ e-\u003e getmessage ()
)));
}
Muvaffaqiyatli avtorizatsiya yoki ro'yxatdan o'tishi yoki yuqorida ko'rsatilgan kodni avtorizatsiya qilish uchun havolasi bo'lgan shaxsga yuboradi. Belgilangan URL manzili bo'yicha token (lexema) - bu URL manzili bo'yicha $ "TNK" sifatida mavjud bo'ladi.

index.php.

Agar (Issiq ($ _ ["tkapn"]))))) (

// bu haqiqiy login tokeni?
$ Foydalanuvchi \u003d Foydalanuvchi :: FindbyTenoken ($ _ olish ["tkapek"];

// Ha! Foydalanuvchiga kiring va himoyalangan sahifaga yo'naltiring.

$ Foydalanuvchi-\u003e Kirish ();
Qayta yo'naltirish ("himoyalangan.php");
}

// noto'g'ri token. Kirish formasiga qayta yo'naltirish.
Qayta yo'naltirish ("index.php");
}
$ Foydalanuvchi -\u003e Kirish () Seans uchun kerakli o'zgaruvchilarni yaratadi, bu foydalanuvchiga keyingi kirishlarda ruxsat beriladi.

Tizimdan chiqish bir xil tarzda amalga oshiriladi:

Index.php.

Agar (Issiq ($ _ olish))) (

$ Foydalanuvchi \u003d yangi foydalanuvchi ();

Agar ($ foydalanuvchi-\u003e Loggedin ()) ()
$ Foydalanuvchi-\u003e Kirish ();
}

Qayta yo'naltirish ("index.php");
}
Kodeksning oxirida biz yana foydalanuvchini index.php, shuning uchun parametr \u003d 1 URL-dagi parametr chiqarib tashlansin.

Bizning indeks.php fayli ham himoyaga muhtoj bo'ladi - biz tasdiqlovchi foydalanuvchilar ushbu shaklni ko'rishlarini xohlamaymiz. Buning uchun biz $ foydalanuvchi-\u003e qayd qilingan () usulidan foydalanamiz:

Index.php.

$ Foydalanuvchi \u003d yangi foydalanuvchi ();

agar ($ foydalanuvchi-\u003e Loggedin ()) ()
Qayta yo'naltirish ("himoyalangan.php");
}
Va nihoyat, keling, saytingiz sahifasini qanday himoya qilishingiz va uni avtorizatsiyadan keyin amalga oshirishingiz mumkinligini bilib olaylik:

himoyalangan.php.

// saytingizda har qanday PHP sahifani himoya qilish uchun asosiy.php
// va yangi foydalanuvchi ob'ektini yarating. Bu juda oddiy!

talab qiladigan_once '-ni o'z ichiga oladi / Main.php';

$ Foydalanuvchi \u003d yangi foydalanuvchi ();

agar (! Foydalanuvchi-\u003e Loggedin ()) ()
Qayta yo'naltirish ("index.php");
}
Ushbu chekdan so'ng siz foydalanuvchi muvaffaqiyatli vakolatga ega ekanligiga amin bo'lishingiz mumkin. Shuningdek, siz ma'lumotlar bazasida $ foydalanuvchi ob'ekti xususiyatlari sifatida saqlanadigan ma'lumotlarga kirasiz. Elektron foydalanuvchining va ularning martabasini namoyish qilish uchun quyidagi koddan foydalaning:

Echo "Sizning elektron pochtangiz:" $ foydalanuvchi-\u003e Elektron pochta;
echo "Sizning martabangiz:" $ Foydalanuvchi-\u003e Rank ();
Bu erda () bir martalik () usul, chunki ma'lumotlar bazasidagi darajadagi ustunlar odatda raqamlar (ma'murlar uchun 0) raqamlar mavjud (ma'murlar uchun 0 va 1 uchun 0) va biz buni ushbu usuldan foydalanib amalga oshiradigan reytinglar nomlari bilan barcha reytinglar nomlari bilan almashtirishimiz kerak. Oddiy foydalanuvchini Administratorga o'tkazish uchun shunchaki fpmyadmin (yoki boshqa boshqa ma'lumotlar bazasi dasturida) foydalanuvchi yozuvini tahrirlash. Administrator bo'lish, foydalanuvchi ba'zi maxsus xususiyatlarga ega bo'lmaydi. Siz Administratorlarga qanday huquqlarni tanlaysiz.

Tayyor!

Shunga ko'ra, bizning oddiy ro'yxatga olish tizimi tayyor! Siz uni allaqachon mavjud PHP-saytda ishlatishingiz yoki uni yangilash, o'z talabingizga rioya qilishingiz mumkin.