اینترنت پنجره ها اندروید

نوشتن ثبت نام به پی اچ پی ایجاد یک سیستم ثبت نام کاربر ساده برای PHP و MySQL

به منظور تقسیم بازدیدکنندگان سایت به برخی گروه ها در سایت، مطمئن شوید که یک سیستم کوچک ایجاد کنید ثبت نام با پی اچ پی. بنابراین، شما به طور معمول بازدیدکنندگان را به دو گروه از بازدیدکنندگان تصادفی تقسیم می کنید و به یک گروه دیگر از کاربران که اطلاعات ارزشمند بیشتری را صادر می کنند، تقسیم می شوند.

در اغلب موارد، از یک سیستم ثبت نام ساده تر استفاده کنید که در یک فایل در پی اچ پی نوشته شده است. register.php.

بنابراین، ما کمی پریشان بودیم، و در حال حاضر فایل ثبت نام را در جزئیات بیشتر در نظر می گیریم.

ثبت نام فایل .php.

برای اینکه شما توده ای را از دست ندهید، یک سیستم ایجاد کنید که کاربران را جمع آوری می کند، حداقل اطلاعات تماس را از آنها دریافت می کند. در این مورد، هر کس به پایگاه داده MySQL ارسال می شود. برای بالاترین سرعت پایه، ما یک جدول کاربران را در فرمت MyISAM و در کدگذاری UTF-8 ایجاد خواهیم کرد.

توجه داشته باشید! شما باید تمام اسکریپت ها را در یک کدگذاری بنویسید. تمام فایل های سایت و پایگاه داده MySQL باید در یک رمزگذاری واحد باشند. رایج ترین کد های UTF-8 و Windows-1251.

برای آنچه شما نیاز دارید همه چیز را در یک کدگذاری بنویسید، بعدا به نحوی صحبت خواهیم کرد. در عین حال، این اطلاعات را به عنوان سخت ترین قانون ایجاد اسکریپت ها، در غیر این صورت مشکلی با کار اسکریپت ها وجود خواهد داشت. البته هیچ چیز وحشتناک نیست، اما به سادگی وزن زمان را برای پیدا کردن اشتباهات در اسکریپت از دست ندهید.

چگونه اسکریپت کار می کند؟

ما می خواهیم همه چیز را ساده کنیم و نتیجه ای سریع دریافت کنیم. بنابراین، ما از کاربران فقط ورود به سیستم، ایمیل و رمز عبور خود را دریافت خواهیم کرد. و برای محافظت در برابر روبات های اسپم، یک CAPTCHA کوچک را نصب کنید. در غیر این صورت، هر پسر از لندن یک ربات کوچک ربات را می نویسد که در عرض چند دقیقه تمام پایه را با کاربران آهک پر می کند و در نابغه و مجازات خود شادی خواهد کرد.

در اینجا خود اسکریپت است. همه چیز در یک فایل نوشته شده است. register.php:

! `؛ // سوال قرمز علامت $ sha \u003d $ s. "scripts / pro /"؛ // مسیر به پوشه اصلی $ bg \u003d `bgcolor \u003d" # e1ffeb "`؛ // خطوط رنگ پس زمینه؟\u003e مثال از ثبت نام اسکریپت ثبت نام register.php style.css "/\u003e

در این مورد، اسکریپت به خودم تجدید نظر می کند. و یک فرم و دستیابی اطلاعات ثبت شده است. من توجه شما را جلب می کنم که فایل توسط بایگانی ZIP فشرده شده است و شامل فایل پیکربندی Config.php، فایل تخلیه پایگاه داده کاربر، فایل حاوی توابع کمکی functions.php، سبک فایل style.css و فایل register.php خودت. همچنین، چندین فایل که مسئول کار و تولید کاراکترهای محدود هستند.

reg.ru: دامنه ها و میزبانی

بزرگترین ضبط کننده و ارائه دهنده خدمات میزبانی در روسیه.

بیش از 2 میلیون نام دامنه برای تعمیر و نگهداری.

ارتقاء، ایمیل برای دامنه، راه حل های کسب و کار.

بیش از 700 هزار مشتری در سراسر جهان قبلا انتخاب خود را انجام داده اند.

* ماوس را به حالت تعلیق در نظر بگیرید.

برگشت به جلو

ایجاد یک سیستم ثبت نام کاربر ساده برای PHP و MySQL

ایجاد یک سیستم ثبت نام یک کار بزرگ است. شما باید یک کد را بنویسید که آدرس های ایمیل را اجرا می کند، پیام را به تایید ایمیل ارسال می کند و همچنین اعتبار سنجی زمینه های باقی مانده را انجام می دهد و خیلی بیشتر.

و حتی پس از اینکه همه اینها را بنویسید، کاربران با اکراه ثبت نام خواهند کرد، زیرا این نیاز به تلاش های خاصی در مورد آنها دارد.

در این درس، ما یک سیستم ثبت نام بسیار ساده ایجاد خواهیم کرد که نیازی به آن ندارد و کلمه عبور را به طور کلی ذخیره نمی کند! نتیجه تغییر آسان خواهد بود و به یک سایت PHP موجود اضافه کنید. آیا می خواهید بدانید چگونه کار می کند؟ زیر را بخوان.



در اینجا این است که چگونه سیستم فوق العاده ساده ما کار خواهد کرد:

ما فرم مجوز و ثبت نام را ترکیب می کنیم. در این فرم یک فیلد برای ورود به آدرس ایمیل و یک دکمه ثبت نام وجود دارد؛
- هنگام پر کردن فیلد آدرس ایمیل، یک کاربر جدید با کلیک بر روی دکمه ثبت نام ایجاد می شود، اما تنها اگر آدرس ایمیل وارد شده در پایگاه داده یافت نشد.

پس از آن، یک مجموعه منحصر به فرد منحصر به فرد از شخصیت ها (نشانه) ایجاد شده است، که به کاربر مشخص شده توسط کاربر به صورت مرجع ارسال می شود که در عرض 10 دقیقه مرتبط خواهد بود؛
- توسط لینک، کاربر به سایت ما می رود. این سیستم حضور یک نشانه را تعیین می کند و کاربر را مجاز می کند؛

مزایای این روش:

بدون نیاز به ذخیره کلمه عبور و انجام اعتبار میدان؛
- نیازی به بازگرداندن رمز عبور، سوالات مخفی و غیره وجود ندارد.
- از لحظه ای که کاربر ثبت نام کرده / مجاز شما همیشه می توانید مطمئن باشید که این کاربر در منطقه دسترسی شما خواهد بود (که آدرس ایمیل درست است)؛
- روند ثبت نام فوق العاده ساده؛

معایب:

امنیت حساب کاربری اگر کسی به ایمیل دسترسی داشته باشد، می تواند وارد سیستم شود.
- ایمیل محافظت نشده است و می تواند متوقف شود. به یاد داشته باشید که این سوال مربوطه و در مورد زمانی که رمز عبور فراموش شده است و باید بازسازی شود، یا در هر سیستم مجوز که از HTTPS برای انتقال داده استفاده نمی کند (ورود / رمز عبور)؛
- در حالی که شما پیکربندی کنید که چگونه به سرور ایمیل نیاز دارید، احتمال وجود دارد که پیام هایی با لینک ها به مجوز در هرزنامه باشد؛

با مقایسه مزایا و معایب سیستم ما، می توان گفت که سیستم دارای Yuzability بالا (مناسب ترین برای کاربر نهایی) است و در عین حال دارای یک شاخص امنیتی کم است.

بنابراین استفاده از آن برای ثبت نام در انجمن ها و خدمات ارائه شده است که با اطلاعات مهم کار نمی کنند.

نحوه استفاده از این سیستم

در مورد زمانی که شما فقط نیاز به استفاده از سیستم برای اجازه کاربران در سایت خود، و شما نمی خواهید به جدا کردن این درس در استخوان، این چیزی است که شما باید انجام دهید:

شما نیاز به دانلود منابع متصل به درس دارید
- پیدا کردن فایل در بایگانی tables.sql آن را به پایگاه داده خود وارد کنید با استفاده از گزینه واردات در phpmyadmin. راه جایگزین: این فایل را از طریق یک ویرایشگر متن باز کنید، پرس و جو SQL را کپی کنید و آن را اجرا کنید؛
- باز کن شامل / main.php. و تنظیمات ارتباطی را با پایگاه داده خود پر کنید (یک کاربر و رمز عبور را برای برقراری ارتباط با پایه و همچنین میزبان و نام پایه مشخص کنید). در همان فایل، شما همچنین باید ایمیل را مشخص کنید، که به عنوان آدرس اصلی برای پیام های ارسال شده توسط سیستم استفاده می شود. برخی از میزبان ها ایمیل های خروجی را مسدود می کنند در حالی که فرم این آدرس ایمیل را مشخص نمی کند، که از پانل کنترل میزبان ایجاد شده است، بنابراین آدرس واقعی را مشخص کنید؛
- تمام فایل ها را بارگیری کنید index.php, protected.php و دارایی ها و شامل پوشه ها از طریق FTP در میزبان شما؛
- اضافه کردن کد زیر به هر صفحه پی اچ پی، که در آن شما نیاز به نمایش فرم مجوز؛

نیاز به "شامل / main.php"؛ $ کاربر \u003d کاربر جدید ()؛ اگر ($ user- & gtloggedin ()) (redirect ("index.php")؛)
- آماده!

برای کسانی که علاقه مند هستند، چگونه همه کارها - به جلو به خواندن در زیر!

اولین گام این است که کد HTM از فرم مجوز را بنویسید. این کد در فایل واقع شده است. index.php. این فایل همچنین شامل یک کد پی اچ پی است که دستگاه های فرم داده و سایر توابع مفید سیستم مجوز را تشکیل می دهند. شما می توانید بیشتر در بخش زیر اختصاص داده شده به بررسی کد پی اچ پی یاد بگیرید.

index.php

آموزش: سیستم ثبت نام فوق العاده ساده با پی اچ پی و MySQL

ورود یا ثبت نام.

آدرس ایمیل خود را بالا وارد کنید و ما ارسال خواهیم کرد
شما یک لینک ورودی دارید

در بخش سر (بین برچسب ها و) من سبک های اصلی (در این درس آنها را درک نمی کنم، بنابراین شما می توانید آنها را ببینید. پوشه دارایی / CSS / style.css). به برچسب بسته شدن من کتابخانه جی کوئری و فایل script.js را متصل کردم، که ما فقط در زیر نوشتیم و تعجب می کنیم.


جاوا اسکریپت

jQuery وضعیت دکمه "ثبت نام / auto." را با استفاده از تابع ردیابی می کند e.PreventDefault () و درخواست های AJAX را ارسال می کند. بسته به پاسخ سرور، این پیام یا آن پیام را نمایش می دهد و اقدامات بیشتری را تعیین می کند

دارایی / js / script.js

$ (تابع () (var form \u003d $ ("# ورود به سیستم ثبت نام")؛ form.on ("ارسال"، تابع (e) (اگر (form.is (". بارگذاری، ؛) var email \u003d form.Find ("ورودی"). val ()، mustomerholder \u003d form.find ("span")؛ E.PreventDefault ()؛ $ .POST (این، ایمیل: ایمیل)، عملکرد ( m) (form.AddClass ("خطا")؛ mustomerholder.text (m.Message)؛) else (form.removeclass ("خطا"). AddClass ("Loggedin")؛ پیامبر ))؛)؛ $ (سند) .AJAXSTART (عملکرد ()؛))؛ $ (سند) .AJAXCOMPLETE (FUNCTURE ()

به فرم اضافه شد تا وضعیت فعلی درخواست AJAX را نمایش دهد (این امر به دلیل روش ها امکان پذیر بود ajaxstart ()) من. ajaxComplete ()که شما می توانید نزدیک به پایان فایل را پیدا کنید).

این کلاس یک فایل GIF متحرک را نشان می دهد (به عنوان اگر اشاره ای که درخواست پردازش شده است)، و همچنین به عنوان یک پرچم عمل می کند که از فرم ارسال مجدد جلوگیری می کند (زمانی که دکمه ثبت نام قبلا یک بار فشار داده شده است). کلاس .وارد شده. - این یک پرچم دیگر است، زمانی که ایمیل فرستاده شده تنظیم شده است. این پرچم بلافاصله هر اقدام دیگری را با فرم متوقف می کند.

طرح پایگاه داده

سیستم ثبت نام فوق العاده ساده ما از 2 جداول MySQL استفاده می کند (کد SQL در فایل است tables.sql) اولین فروشگاه ها را در حساب های کاربری ذخیره می کند. دوم فروشگاه اطلاعات را در مورد تعداد تلاش های ورودی ذخیره می کند.


مدار جدول کاربر

سیستم از کلمه عبور استفاده نمی کند، که در نمودار قابل مشاهده است. شما می توانید ستون را ببینید نشانه با نشانه های مجاور ستون token_valucy. این نشانه به محض این که کاربر به سیستم متصل شود نصب می شود، ایمیل خود را برای ارسال یک پیام (کمی بیشتر در مورد این در بلوک بعدی) تنظیم می کند. ستون token_valucy زمان 10 دقیقه بعد تنظیم می شود، پس از آن نشانه متوقف می شود.


مدار جدول، که تعدادی از تلاش های مجوز را در نظر می گیرد.

در هر دو جداول، آدرس IP در فرم پردازش شده با استفاده از عملکرد IP2Long در قسمت عدد صحیح ذخیره می شود.

در حال حاضر ما می توانیم یک کد پی اچ پی کمی بنویسیم. عملکرد اصلی سیستم به کلاس سپرده شده است user.class.php.که شما می توانید زیر را ببینید.

این کلاس به طور فعال از iDorm (Docs) استفاده می کند، این کتابخانه ها ابزار حداقل لازم برای کار با پایگاه های داده هستند. این دسترسی به پایگاه داده، نسل نشانه ها و اعتبار آنها را پردازش می کند. این یک رابط کاربری ساده است که به شما اجازه می دهد تا به راحتی سیستم ثبت نام را به سایت خود وصل کنید اگر از PHP استفاده می کند.

user.class.php.

User Class Class (/ / Private Orm Case Private $ ORM؛ / ** * پیدا کردن یک کاربر در Tocken. فقط نشانه های معتبر مورد توجه قرار می گیرند. Tocken تنها برای 10 دقیقه از لحظه تولید می شود * param string $ token. این است Tocken * @ @ کاربر @ کاربر return. مقدار تابع تابع * / عملکرد عمومی عمومی FindByToken ($ token) را بازگردانید (/ / / / / / /// play را پیدا کنید و اطمینان حاصل کنید که زمان فعلی تمبر $ نتیجه \u003d ORM :: for_table (" REG_USERS ") -\u003e کجا (" Token "، $ Token) -\u003e Where_Raw (" token_valiture\u003e now () ") -\u003e find_one ()؛ اگر (! $ نتیجه) (بازگشت نادرست؛) بازگرداندن کاربر جدید ($ نتیجه) ؛) / ** * مجوز یا ثبت نام یک کاربر * param string $ ایمیل. آدرس ایمیل سفارشی * @ @ رده عمومی ($ ایمیل) (// / / / / / / / / / اگر چنین کاربر قبلا وجود داشته باشد، مقدار تابع کاربر را بازگردانید از آدرس ایمیل مشخص شده ذخیره شده در پایگاه داده اگر (کاربر :: وجود دارد ($ ایمیل)) (بازگرداندن کاربر جدید ($ ایمیل)؛) // در غیر این صورت یک کاربر جدید ایجاد کنید تلویزیون در پایگاه داده و ارزش عملکرد کاربر را بازگردانید :: ایجاد از ایمیل مشخص شده ایمیل کاربر :: ایجاد ($ ایمیل)؛ ) / ** * ایجاد یک کاربر جدید و ذخیره به پایگاه داده * param رشته $ ایمیل. آدرس ایمیل کاربر * return کاربر * / عملکرد خصوصی استاتیک ایجاد ($ ایمیل) (/ / دریافت یک کاربر جدید و بازگشت نتیجه عملکرد کاربر از این مقادیر $ نتیجه \u003d ORM :: for_table ("reg_users") - \u003e ایجاد ()؛ $ نتیجه-\u003e ایمیل \u003d $ ایمیل؛ $ نتیجه-\u003e ذخیره ()؛ بازگرداندن کاربر جدید ($ نتیجه)؛) / ** * بررسی کنید که آیا چنین کاربر در پایگاه داده وجود دارد و مقدار متغیر را نشان می دهد متغیر * param رشته $ ایمیل. آدرس ایمیل سفارشی * return boolean * / عملکرد عمومی استاتیک موجود ($ ایمیل) (/ / آیا کاربر در پایگاه داده وجود دارد؟ $ نتیجه \u003d ORM :: for_table ("reg_users") -\u003e کجا ("ایمیل"، $ ایمیل ) -\u003e COUNTS ()؛ بازگشت $ نتیجه \u003d\u003d 1؛) / ** * ایجاد یک شیء کاربر جدید * @ param instance $ param ORM، ID، ایمیل یا 0 * return user * / عملکرد عمومی __Construct ($ param \u003d null) (اگر ($ param instanceOf ORM) (/ / / / / / / / / / / / / orm check به $-\u003e orm \u003d $ param منتقل می شود؛) else (is_string (param param)) (// ایمیل چک کردن $ این-\u003e om \u003d om :: for_table ("reg_users") -\u003e کجا ("ایمیل"، $ param) -\u003e find_one ()؛) else ($ id \u003d 0؛ اگر (is_numeric (param param)) (// شناسه کاربری به مقدار انتقال داده می شود $ param $ id value \u003d $ param؛) else isset (isset (session $ _ ["loginid"]) (// در غیر این صورت جلسه $ id \u003d $ _session را ببینید ["loginid"]؛) $ این-\u003e ORM \u003d ORM :: for_table ("REG_USERS") -\u003e کجا ("ID"، $ ID) -\u003e Find_One ()؛) / ** * ایجاد مجوز جدید SHA1 جدید، می نویسد در پایگاه داده و مقدار آن را باز می گرداند * return string * / تابع عمومی generatetoken () (/ / ایجاد یک نشانه برای یک کاربر مجاز و ذخیره آن به $ token \u003d sha1 ($ this-\u003e email.time (). RAND (0 ، 1000000))؛ // ذخیره نشانه ها در پایگاه داده // و علامت گذاری آن را که فقط در 10 دقیقه بعد از دقیقه $ این orm-\u003e set ("token"، $ token) مربوط است. $ این-\u003e orm-\u003e set_expr ("token_valiture"، "اضافه کردن (در حال حاضر ()،" 0:10 ")")؛ $ این-\u003e om-\u003e ذخیره ()؛ بازگشت $ token؛ ) / ** * مجوز کاربر * return void * / عملکرد عمومی ورود به سیستم () (/ / علامت گذاری به عنوان کاربر به عنوان مجاز $ _session ["loginid"] \u003d $ این orm-\u003e id؛ // refresh ارزش پایه پایه last_login $ $-\u003e om-\u003e set_expr ("last_login"، "now ()")؛ $ این-\u003e orm-\u003e ذخیره ()؛) / ** * از بین بردن جلسه و رمزگذاری کاربر * return void * / performance logout () ($ _SESSION \u003d ARRAY ()؛ UNSET ($ _ جلسه)؛) / ** * بررسی، آیا کاربر آمد * return boolean * / عملکرد عمومی loggedin () (بازگشت isset ($ این-\u003e orm-\u003e id) && $ _Session ["loginid"] \u003d\u003d $ این-\u003e\u003e orm-\u003e id؛) / ** * بررسی کاربر کاربر * return boolean * / عملکرد عمومی Isadmin () (بازگشت $ این-\u003e رده () \u003d \u003d "administrator"؛) / ** * پیدا کردن یک نوع کاربر، ممکن است یا مدیر یا به طور منظم * return string * / عملکرد عمومی () (اگر ($ این\u003e\u003e orm-\u003e رتبه \u003d\u003d 1) (بازگشت "مدیر"؛) بازگشت "منظم"؛) / ** * روش اجازه می دهد تا شما را به دریافت اطلاعات خصوصی حساب کاربری در * خواص کیفیت کاربر * param string $ key ویژگی های کلیدی ویژگی دریافت دسترسی * return miject * / عملکرد عمومی __get ($ key) (اگر (isset ($ this-\u003e ор -\u003e $ key)) (بازگشت $ این-\u003e ORM -\u003e $ کلید؛ ) بازگشت null؛ )

Tokens با استفاده از الگوریتم SHA1 تولید می شود و در پایگاه داده ذخیره می شود. من از توابع زمان MySQL استفاده می کنم تا محدودیت های 10 دقیقه ای مربوط به ارتباط Tokeny را تنظیم کنم.

هنگامی که این نشانه روش اعتبارسنجی را گذراند، ما به طور مستقیم با دستگیره صحبت می کنیم که ما تنها نشانه هایی را که هیچ تاریخ انقضا ندارند، در ستون Tken_Validy ذخیره می کنیم.

توجه داشته باشید که از روش جادویی استفاده می کنم __گرفتن. کتابخانه های Docs در پایان فایل برای دسترسی به خواص شیء کاربر.

با توجه به این، به لطف خواص، امکان دسترسی به اطلاعات ذخیره شده در پایگاه داده وجود دارد $ کاربر-\u003e ایمیل، $ user-\u003e token و همکاران در بخش کد زیر، به عنوان مثال، نحوه استفاده از این کلاس ها را در نظر بگیرید.


صفحه محافظت شده

فایل دیگری که قابلیت های مفید و ضروری را ذخیره می کند یک فایل است. functions.php. چندین کارمند به اصطلاح وجود دارد - توابع دستیار که به شما اجازه می دهد کد پاک کننده و قابل خواندن را در سایر فایل ها ایجاد کنید.

functions.php

تابع send_email ($ از، $ به، $ موضوع، $ پیام) (// / helper، ارسال ایمیل $ headers \u003d "mime-version: 1.0". "\\ r \\ n"؛ $ headers \u003d "type content-type: text / دشت؛ charset \u003d utf-8 "." \\ r \\ n "؛ $ headers \u003d" از: "$ از". \\ r \\ n "؛ بازگشت ایمیل ($ به، $ موضوع، $ پیام، $ headers )؛) تابع get_page_url () (// uRL File PHP ایالات متحده \u003d "http" را تعیین کنید. (خالی ($ _ سرور ["https"])؟ "": "S") ": //" $ _ سرور ["server_name"]؛ اگر (isset ($ _ سرور ["request_uri"]) && $ _server ["request_uri"]! \u003d "") ($ URL \u003d $ _server ["request_uri"]؛) else else ($ url . \u003d $ _server ["path_info"]؛) بازگشت $ URL؛) تابع نرخ Rate_limit ($ IP، $ limit_hour \u003d 20، $ limit_10_min \u003d 10) (/ / تعداد تلاش های ورودی برای ساعت گذشته در این آدرس IP $ count_hour \u003d ORM:: for_table ("reg_login_attemptement") -\u003e کجا ("IP"، Sprintf ("٪ U"، IP2Long ($ IP))) -\u003e Where_raw ("TS\u003e SubTime (در حال حاضر ()،" 1:00 " ) ") -\u003e تعداد ()؛ // تعداد تلاش های ورودی در 10 دقیقه گذشته در این آدرس IP $ count_10_min \u003d ORM :: for_table (" reg_login_attemptent ") -\u003e کجا (" IP "، Sprint f ("٪ U"، IP2Long ($ IP))) -\u003e where_raw ("ts\u003e subtime (در حال حاضر ()،" 0:10 ")") -\u003e شمارش ()؛ اگر ($ count_hour\u003e $ limit_hour || $ count_10_min\u003e $ limit_10_min) (پرتاب استثناء جدید ("بیش از حد بسیاری از تلاش های ورود به سیستم!")؛))) تابع rate_limit_tick ($ IP، $ ایمیل) (/ / ایجاد یک ورودی جدید در جدول که تعداد تلاش های ورودی را در نظر می گیرد $ logg_attempt \u003d ORM :: for_table ("reg_login_attempte") -\u003e ایجاد ()؛ $ login_attemptem-\u003e Email \u003d $ email؛ $ login_attempt-\u003e ip \u003d sprintf ("٪ u"، IP2Long ($ IP )) $ login_attempt-\u003e ذخیره ()؛) تابع تغییر مسیر ($ URL) (header ("محل: $ url")؛ خروج؛)

کارکرد حد نرخ. و rate_limit_tick آنها به دنبال تعدادی از تلاش های مجوز برای مدت زمان منقضی شده از لحظه ای از اولین تلاش هستند. تلاش ورودی در پایگاه داده در ستون reg_login_attempt ثبت شده است. این توابع هنگام پردازش و ارسال اطلاعات فرم به عنوان شما می توانید از قطعه کد بعدی را ببینید.

کد از فایل زیر گرفته شده است. index.php و آن را فرآیند ارسال فرم. این پاسخ JSON را باز می کند، که به نوبه خود توسط جی کوئری در فایل پردازش می شود دارایی / js / script.jsکه ما قبلا قبلا جدا شده ایم.

index.php

سعی کنید (اگر (! خالی ($ _ post) && isset ($ _ سرور ["http_x_requested_with"])) (/ / خروجی هدر هدر JSON ("نوع محتوا: برنامه / json")؛ // این آدرس ایمیل است معتبر اگر (! isset ($ _ post ["email"]) ||! filter_var ($ _ post ["email"]، filter_validate_email)) (پرتاب استثناء جدید (لطفا یک ایمیل معتبر را وارد کنید)؛) // چک کنید این که آیا کاربر مجاز به ورود به سیستم است، از تعداد اتصالات مجاز تجاوز می کند؟ (functions.php فایل برای اطلاعات بیشتر) Rate_limit ($ _ سرور ["Remote_addr"])؛ // این تلاش برای تأیید rate_limit_tick ($ _ سرور ["Remote_addr"]، $ _POST ["ایمیل"])؛ // ارسال نامه به کاربر $ message \u003d ""؛ $ ایمیل \u003d $ _POST ["ایمیل"]؛ $ subject \u003d "لینک ورود شما" ؛ اگر (کاربر :: exists ($ email)) ($ subject \u003d "با تشکر از شما برای ثبت نام!"؛ $ message \u003d "متشکرم برای ثبت نام در سایت ما! \\ n \\ n"؛) // تلاش برای تأیید یا ثبت نام کاربر $ user \u003d User :: loginorregister ($ _ post ["email"])؛ $ پیام \u003d "شما می توانید از این URL وارد شوید: \\ n" ؛ $ پیام \u003d get_page_url () "؟ tkn \u003d". $ user-\u003e generatetoken (). "\\ n \\ n"؛ $ پیام \u003d "لینک پس از 10 دقیقه به طور خودکار منقضی می شود." $ نتیجه \u003d send_email ($ fromemail، $ _post ["ایمیل"]، $ subject، $ پیام)؛ اگر (! $ نتیجه) (استثناء جدید را پرتاب کرد ("یک خطا ارسال ایمیل شما بود. لطفا دوباره امتحان کنید")؛)؛)؛) Die (json_encode ("پیام" \u003d\u003e "متشکرم! ما یک لینک ارسال کردیم به صندوق ورودی خود را چک کنید پوشه اسپم خود را نیز بررسی کنید. ")))؛))؛)) گرفتن (json_encode (array" \u003d\u003e 1، "پیام" \u003d\u003e $ e-\u003e getMessage ()))؛)

پس از مجوز مجوز / ثبت نام موفق، کاربر یک پیوند را به مجوز کاربر ارسال می کند. Tocken مقرون به صرفه می شود، زیرا این به عنوان یک متغیر در روش پیوند تولید شده منتقل می شود $ _get. با نشانگر TKN

index.php

اگر (isset ($ _ get ["tkn"])) (// این نشانه معتبر برای مجوز؟ $ user \u003d کاربر :: findbyToken ($ _ get ["tkn"])؛ اگر ($ کاربر) (// بله این است که یک تغییر مسیر به صفحه محافظت شده از $ user-\u003e ورود ()؛ redirect ("protected.php")؛) // نه، Token معتبر نیست. پیاده سازی یک تغییر مسیر، در صفحه با فرم از مجوز / ثبت نام تغییر مسیر ("index.php")؛)

$ کاربر-\u003e ورود ()

متغیرهای لازم برای جلسه را ایجاد کنید، به طوری که کاربر، به دنبال صفحات سایت بعدی، همیشه مجاز خواهد بود.

به طور مشابه، پردازش عملکرد برای خروج از سیستم نیز مرتب شده است.

index.php

اگر (isset ($ _ get ["logout"]) ($ user \u003d کاربر جدید ()؛ اگر ($ user-\u003e loggedin ()) ($ user-\u003e logout ()؛) Redirect ("index.php" )؛)؛)

در پایان کد، من دوباره یک تغییر مسیر را در index.php قرار دادم، بنابراین پارامتر ؟ خروج \u003d 1 مورد نیاز URL مورد نیاز نیست

فایل ما index.php نیاز به اضافه کردن حفاظت - ما نمی خواهیم افرادی که تا به حال سیستم وارد سیستم شده اند، دوباره فرم ثبت نام را دیدند. برای این اهداف، ما از روش استفاده می کنیم $ user-\u003e loggedin ().

index.php

$ کاربر \u003d کاربر جدید ()؛ اگر ($ user-\u003e loggedin ()) (redirect ("protected.php")؛)

در نهایت، در اینجا یک قطعه کد است که به شما اجازه می دهد تا از صفحات سایت خود محافظت کنید و تنها پس از مجوز آن را در دسترس قرار دهید.

protected.php

// برای محافظت از هر صفحه در سایت خود، فایل // main.php را به آن وصل کنید و یک شی کاربر جدید ایجاد کنید. این چقدر آسان است! نیاز به "شامل / main.php"؛ $ کاربر \u003d کاربر جدید ()؛ اگر ($ user-\u003e loggedin ()) (redirect ("index.php")؛)

پس از این چک، می توانید مطمئن باشید که کاربر با موفقیت مجاز است. شما همچنین می توانید اطلاعات ذخیره شده را در پایگاه داده با استفاده از خواص شیء دسترسی داشته باشید. $ کاربر. برای نمایش ایمیل و کاربر و وضعیت آن، از این کد استفاده کنید:

echo "ایمیل شما:" $ کاربر-\u003e ایمیل؛ echo "رتبه شما:" $ کاربر-\u003e رتبه ()؛

روش رتبه () در اینجا استفاده می شود زیرا پایگاه داده معمولا ذخیره می شود (0 برای یک کاربر معمولی، 1 برای مدیر) و ما باید این داده ها را به وضعیت هایی که به ما مربوط می شود و این روش به آن کمک می کند، تبدیل کنیم.

برای ایجاد یک مدیر از یک کاربر معمولی، به سادگی ورود کاربر را از طریق phpMyAdmin (یا هر برنامه دیگری که به شما امکان می دهد پایگاه داده ها را مدیریت کنید) را ویرایش کنید. وضعیت مدیر هیچ امتیازاتی را ارائه نمی دهد، در این مثال در صفحه نمایش داده خواهد شد که شما یک مدیر هستید - و این است.

اما با آن چه کار میکنید - آن را با اختیار شما باقی می ماند، می توانید یک کد بنویسید و ایجاد کنید که امتیازات و فرصت های خاصی را برای مدیران تعریف می کند.

ما به پایان رسید!

با استفاده از این فرم فوق العاده فوق العاده شبه ساده، ما به پایان رسید! شما می توانید آن را در سایت های پی اچ پی خود استفاده کنید، به اندازه کافی آسان است. شما همچنین می توانید آن را تحت خود تغییر دهید و آن را مانند شما می خواهید.

مواد آماده دنیس کودک به ویژه برای سایت سایت

P.S. آیا می خواهید در تسلط بر روی پی اچ پی و OOP حرکت کنید؟ توجه به درس های حق بیمه در جنبه های مختلف ساختمان های سایت، از جمله برنامه نویسی پی اچ پی، و همچنین یک دوره رایگان در ایجاد سیستم CMS خود را بر روی پی اچ پی از صفر با استفاده از OOP:

آیا مواد را دوست دارید و می خواهید تشکر کنید؟
فقط با دوستان و همکارانش به اشتراک بگذارید!


1. بیایید با ایجاد کاربران ثبت نام در پایگاه داده شروع کنیم. این اطلاعات کاربر را شامل می شود (ورود و رمز عبور). بیایید به phpmyadmin برویم (اگر یک پایگاه داده را بر روی کامپیوتر خود ایجاد کنید http: // localhost / phpmyadmin /). یک جدول ایجاد کنید کاربراناین 3 زمینه دارد.

من آن را در پایگاه داده MySQL ایجاد می کنم، می توانید در پایگاه داده دیگری ایجاد کنید. بعد، مقادیر را به عنوان تصویر تنظیم کنید:

کلیک " صرفه جویی"بنابراین، ما یک میز داریم
2. لازم است به این جدول متصل شود. بیایید یک فایل ایجاد کنیم bd.php.. محتوای آن:

در مورد من به نظر می رسد این است:

ذخیره bd.php.
عالی ما یک جدول در پایگاه داده داریم، اتصال به آن. حالا شما می توانید یک صفحه را ایجاد کنید که کاربران اطلاعات خود را ترک خواهند کرد.
3. یک فایل ایجاد کنید reg.php با محتوا (همه نظرات داخل):
چک کردن

چک کردن


4. یک فایل ایجاد کنید که داده ها را به پایگاه داده فعال می کند و کاربر را ذخیره می کند. save_user.php.(نظرات داخل):

5. اکنون کاربران ما می توانند ثبت نام کنند! بعد، شما باید "درب" را برای ورود به سایت کاربران ثبت شده در حال حاضر ثبت کنید. index.php (نظرات داخل):
صفحه اصلی.

صفحه اصلی.


ثبت نام


"؛) دیگری (// اگر خالی نباشد، ما لینک echo را نشان می دهیم" شما وارد سایت، مانند $ _ جلسه ["ورود"]. "
این لینک فقط به کاربران ثبت شده در دسترس است "؛)؟\u003e
در پرونده index.php ما یک مرجع را که فقط برای کاربران ثبت شده باز می شود، برداشتیم. این کل ماهیت اسکریپت است - برای محدود کردن دسترسی به هر اطلاعات.
6. یک فایل با چک کردن ورود وارد شده و رمز عبور وارد شده است. testreg.php (نظرات داخل):

خودشه! شاید درس و خسته کننده، اما بسیار مفید است. فقط ایده ثبت نام در اینجا نشان داده شده است، سپس شما می توانید آن را بهبود بخشد: اضافه کردن حفاظت، طراحی، زمینه ها با داده ها، بارگیری آواتار ها، خروجی از حساب (برای این، فقط از بین بردن متغیرها از جلسه با یک تابع از بین بردن uNSET) و غیره. موفق باشید!

همه چیز را چک کردم، خوب کار می کند!

سلام، دوستان در این آموزش ما ثبت نام کاربر را یاد می گیریم و با استفاده از روش PHP ذخیره می شود.
ساختار فایل برای این آموزش
config.php
index.php
Check_Availability.php.
login.php
welcome.php.
logout.php
ساختار جدول SQL Table Table

ایجاد جدول `TBLREGISTRATION` (INT (11) NOLL،` FullName` varchar (200) null، `emailid` varchar (200) null،` password` varchar (255) null، `regdate` timestamp نیست به طور پیش فرض NOT current_timestamp) Engine \u003d Innodb به طور پیش فرض charset \u003d latin1؛

config.php

ایجاد فایل پیکربندی DB با استفاده از فرمت MySQLI. ارائه اعتبار به عنوان پیکربندی خود را

index.php

یک فرم HTML برای ثبت نام UPER ایجاد کنید.

ثبت نام

قبلا ثبت شده است از اینجا وارد شوید.

جی کوئری / آژاکس برای دسترسی به ایمیل کاربر

check_Availability.php.

در این صفحه ما در دسترس بودن ایمیل کاربر را بررسی خواهیم کرد. ایجاد یک روش فروشگاه با نام در دسترس بودن
کد روش فروشگاه:

Delimiter $ ایجاد Router \u003d `` `` `localhost 'روش Checkavailbity` (در eMain` varchar (255)) بدون SQL انتخاب emailID از TBLERGistration که در آن emailID \u003d ایمیل $ delimiter؛

در حال حاضر یک روش فروشگاه برای ثبت نام کاربر ایجاد کنید.
روش فروشگاه برای ثبت نام کاربر

Delimiter $ ایجاد Registry 'Root` @ `` Localhost' Registry '(در `fname` varchar (200)، in eMailID` varchar (200)، در` aliends` varchar (255)) هیچ SQL وارد TBLERCISTRATION ( Fullname، EmailID، Password) مقادیر (FNAME، EMAILID، PASSWORD) $ delimiter؛

پس از ایجاد روش فروشگاه، روش فروشگاه را اجرا می کند.

"؛) دیگر (echo""; } } ?>

در اینجا کد کامل است که ما برای ثبت نام نوشته ایم ( index.php):

alert("Registration Successfull");"؛) دیگر (echo""; } } ?> ثبت نام با استفاده از روش فروشگاه

ثبت نام

قبلا ثبت شده است از اینجا وارد شوید.

ورود به سیستم .php

ایجاد یک فرم ورود به سیستم ورود کاربر

در حال حاضر یک روش فروشگاه برای ورود به نام را ایجاد کنید.
روش ورود به سیستم:

DELIMITER $ CREATE \u003d `` `` `@ root` @ localhost 'login` (در` useremail` varchar (255)، در `varcharal password` varchar $ delimiter؛

در حال حاضر روش ورود به سیستم را اجرا کنید

"$ extra \u003d" login.php "؛))؟\u003e

در اینجا کد کامل است که ما برای ورود به سیستم نوشته شده است ( login.php):

0) ($ _SESSION ["ورود"] \u003d $ _ post ["userymail"]؛ هدر ("محل: welcome.php")؛ دیگر ($ _SESSION ["ورود"] \u003d $ _ post ["userEmail"] ؛ echo ""؛ $ extra \u003d" login.php "؛))\u003e Sasa ورود به سیستم فروشگاه

welcome.php.

پس از ورود به سیستم کاربر به Welcome.php هدایت می شود. این صفحه را با جلسه تأیید کنید اگر کاربر سعی کند به این صفحه دسترسی پیدا کند، کاربر به طور مستقیم به صفحه login.php دسترسی پیدا می کند.

صفحه خوش آمدید

خوش آمدی:

خروج.

logout.php

برای از بین بردن جلسه ورود به سیستم. session_destroy تمام جلسات فعال را از بین می برد.

فرآیند ایجاد یک سیستم ثبت نام بسیار زیاد کار است. شما نیاز به ارسال یک کد است که من می خواهم که اعتبار از آدرس های ایمیل، نامه ایمیل ارسال با تایید، این فرصت را به بازیابی رمز عبور ارائه تمرین، آن را کلمه عبور در یک مکان امن ذخیره می شود، فرم های ورودی بررسی می شود و خیلی بیشتر. حتی زمانی که همه شما این کار را انجام می دهید، کاربران با اکراه ثبت نام خواهند کرد، زیرا حتی حداقل ثبت نام نیاز به فعالیت آنها دارد.

در راهنمای امروز، ما یک سیستم ثبت نام ساده را توسعه خواهیم داد، که به هر کلمه ای نیازی ندارید! ما نتایج را دریافت خواهیم کرد، سیستم که می تواند به راحتی در یک سایت PHP موجود تغییر یا جاسازی شود. اگر علاقه مند هستید، ادامه دهید

پی اچ پی

حالا ما آماده انجام کد پی اچ پی هستیم. عملکرد اصلی سیستم ثبت نام توسط کلاس کاربر ارائه شده است، که می توانید زیر را ببینید. کلاس استفاده می کند ()، که یک کتابخانه مینیمالیستی برای کار با پایگاه های داده است. کلاس کاربر مسئول دسترسی به پایگاه های داده است، تولید Token-S برای ورود به سیستم و اعتبار آنها. این نشان دهنده یک رابط کاربری ساده است که می تواند به راحتی در سیستم ثبت نام در سایت های مبتنی بر PHP شما باشد.

user.class.php.

// نمونه خصوصی ORM
خصوصی $ ORM؛

/**
* یک کاربر را با یک رشته نشانه پیدا کنید فقط نشانه های معتبر گرفته می شود
* توجه. یک نشانه برای 10 دقیقه پس از تولید آن معتبر است.
* param string $ token token برای جستجو
* کاربر return
*/

عملکرد عمومی استاتیک FindByToken ($ token) (

// پیدا کردن آن در پایگاه داده و اطمینان حاصل کنید که زمانبندی درست است


-\u003e کجا ("Token"، $ token)
-\u003e where_raw ("token_valiture\u003e now ()")
-\u003e find_one ()؛

اگر (! $ نتیجه) (
بازگشت نادرست
}

بازگرداندن کاربر جدید ($ نتیجه)؛
}

/**
* یا ورود یا ثبت نام یک کاربر.
* کاربر return
*/

عملکرد عمومی استاتیک LoginorRegister ($ ایمیل) (

// اگر چنین کاربر قبلا وجود داشته باشد، آن را بازگردانید

اگر (کاربر :: وجود دارد ($ ایمیل)) (
بازگرداندن کاربر جدید ($ ایمیل)؛
}

// در غیر این صورت، آن را ایجاد کنید و آن را بازگردانید

بازگشت کاربر :: ایجاد ($ ایمیل)؛
}

/**
* یک کاربر جدید ایجاد کنید و آن را به پایگاه داده ذخیره کنید
* param string $ ایمیل آدرس ایمیل کاربر
* کاربر return
*/

تابع استاتیک خصوصی ایجاد ($ ایمیل) (

// یک کاربر جدید را به پایگاه داده بنویسید و آن را بازگردانید

$ نتیجه \u003d ORM :: for_table ("reg_users") -\u003e ایجاد ()؛
$ نتیجه-\u003e ایمیل \u003d $ ایمیل؛
$ نتیجه-\u003e ذخیره ()؛

بازگرداندن کاربر جدید ($ نتیجه)؛
}

/**
* بررسی کنید که آیا چنین کاربر در پایگاه داده وجود دارد و بازگشت بولین.
* param string $ ایمیل آدرس ایمیل کاربر
* return boolean
*/

عملکرد عمومی استاتیک وجود دارد ($ ایمیل) (

// آیا کاربر در پایگاه داده وجود دارد؟
$ نتیجه \u003d ORM :: for_table ("reg_users")
-\u003e کجا ("ایمیل"، $ ایمیل)
-\u003e تعداد ()؛

بازگشت $ نتیجه \u003d\u003d 1؛
}

/**
* یک کاربر جدید ایجاد کنید
* param $ param orm instance، id، ایمیل یا null
* کاربر return
*/

عملکرد عمومی __CSSTRUCT ($ param \u003d null) (

اگر ($ param instanceOf OM) (

// یک نمونه ORM منتقل شد
$ این-\u003e orm \u003d $ param؛
}
دیگر اگر (is_string ($ param)) (

// یک ایمیل گذشت
$ این-\u003e
-\u003e کجا ("ایمیل"، $ param)
-\u003e find_one ()؛
}
دیگر (

اگر (is_numeric (param param)) (
// شناسه کاربر به عنوان یک پارامتر منتقل شد
$ id \u003d $ param؛
}
دیگر اگر (isset ($ _ جلسه ["loginid"]) (

// هیچ شناسه کاربر منتقل نشد، به SESION نگاه کنید
$ id \u003d $ _session ["loginid"]؛
}

$ این-\u003e orm \u003d orm :: for_table ("reg_users")
-\u003e کجا ("ID"، $ id)
-\u003e find_one ()؛
}

/**
* یک نشانه ورود به سیستم جدید Sha1 را تولید می کند، آن را به پایگاه داده می نویسد و آن را باز می کند.
* return string
*/

عملکرد عمومی generatetoken () (
// یک نشانه را برای کاربر وارد شده تولید کنید. ذخیره آن را به پایگاه داده.

$ token \u003d sha1 ($ this-\u003e email.time (). RAND (0، 1000000))؛

// نشانه را به پایگاه داده ذخیره کنید
// و علامت گذاری آن به عنوان معتبر برای 10 دقیقه بعدی تنها

$ این-\u003e om-\u003e set ("token"، $ token)؛
$ این-\u003e orm-\u003e set_expr ("token_valiture"، "اضافه کردن (در حال حاضر ()،" 0:10 ")")؛
$ این-\u003e om-\u003e ذخیره ()؛

بازگشت $ token؛
}

/**
* ورود به این کاربر
* return void
*/

ورود به سیستم عمومی () (

// علامت گذاری به عنوان ورود به سیستم
$ _session ["loginid"] \u003d $ این-\u003e orm-\u003e id؛

// به روز رسانی زمینه Last_Login DB
$ این-\u003e orm-\u003e set_expr ("last_login"، "now ()")؛
$ این-\u003e om-\u003e ذخیره ()؛
}

/**
* از بین بردن جلسه و خروج از کاربر.
* return void
*/

خروج از عملکرد عمومی () (
$ _session \u003d آرایه ()؛
UNSET (جلسه $ _)؛
}

/**
* بررسی کنید که آیا کاربر وارد سیستم شده است
* return boolean
*/

تابع عمومی loggedin () (
بازگشت isset ($ این-\u003e orm-\u003e id) && $ _Session ["loginid"] \u003d\u003d $ این-\u003e orm-\u003e id؛
}

/**
* بررسی کنید که آیا کاربر یک مدیر است
* return boolean
*/

عملکرد عمومی Isadmin () (
بازگشت $ این-\u003e رتبه () \u003d\u003d "Administrator"؛
}

/**
* نوع کاربر را پیدا کنید این می تواند یا مدیر یا منظم باشد.
* return string
*/

رتبه عملکرد عمومی () (
اگر ($ این-\u003e om-\u003e رده \u003d\u003d 1) (
بازگشت "مدیر"؛
}

بازگشت "منظم"؛
}

/**
* روش سحر و جادو برای دسترسی به عناصر خصوصی
* $ ORM نمونه به عنوان خواص شی کاربر
* @ param string $ key نام اموال قابل دسترسی است
* return مخلوط
*/

عملکرد عمومی __get ($ key) (
اگر (isset ($ this-\u003e orm -\u003e $ key)) (
بازگشت $ این-\u003e ORM -\u003e $ کلید؛
}

بازگشت null؛
}
}
Token-S توسط الگوریتم تولید می شود و در پایگاه داده ذخیره می شود. ما از MySQL استفاده می کنیم تا مقدار را در ستون tken_validy تنظیم کنیم، برابر با 10 دقیقه. هنگامی که اعتبار سنجی TKEN، ما به موتور اطلاع می دهیم که ما نیاز به نشانه داریم، فیلد token_valiture هنوز منقضی نشده است. بنابراین ما زمان محدودی را محدود می کنیم که TENCE معتبر خواهد بود.

لطفا توجه داشته باشید که ما از روش جادویی __get () در انتهای سند برای دسترسی به خواص شیء کاربر استفاده می کنیم. این به ما اجازه می دهد تا به داده هایی که در پایگاه داده ذخیره می شوند دسترسی پیدا کنیم: $ user-\u003e ایمیل، $ user-\u003e token. به عنوان مثال، بیایید ببینیم چگونه می توانیم از این کلاس در بخش کد زیر استفاده کنیم:


فایل دیگری که در آن قابلیت های لازم ذخیره می شود، functions.php است. در اینجا چند توابع کمکی وجود دارد که به ما اجازه می دهد کد باقی مانده را بیشتر بسازیم.

functions.php

تابع send_email ($ از، $ به، $ موضوع، $ پیام) (

// تابع helper برای ارسال ایمیل

$ headers \u003d "mime-version: 1.0". "\\ r \\ n"؛
$ headers \u003d "نوع محتوا: متن / دشت؛ charset \u003d utf-8". "\\ r \\ n"؛
$ headers \u003d "از:". $ از. "\\ r \\ n"؛

بازگشت ایمیل ($ به، $ موضوع، $ پیام، $ هدر)؛
}

تابع get_page_url () (

// پیدا کردن URL یک فایل پی اچ پی

$ URL \u003d "HTTP" را (خالی ($ _ سرور [ "HTTPS"]) "": "S"). ": //" $ _ سرور [ "SERVER_NAME"]؛

اگر (isset ($ _ سرور ["request_uri"]) && $ _server ["request_uri"]! \u003d "") (
$ URL \u003d $ _server ["request_uri"]؛
}
دیگر (
$ url \u003d $ _server ["path_info"]؛
}

بازگشت $ URL؛
}

تابع rate_limit ($ IP، $ limit_hour \u003d 20، $ limit_10_min \u003d 10) (

// تعداد تلاش ورود به سیستم برای ساعت گذشته توسط این آدرس IP

$ count_hour \u003d ORM :: for_table ("reg_login_attemptement")
->
-\u003e where_raw ("ts\u003e subtime (در حال حاضر ()،" 1:00 ")")
-\u003e تعداد ()؛

// تعداد تلاش ورود به سیستم برای 10 دقیقه گذشته توسط این آدرس IP

$ count_10_min \u003d ORM :: for_table ("reg_login_attemptement")
-\u003e کجا ("IP"، Sprintf ("٪ U"، IP2Long ($ IP)))
-\u003e Where_raw ("TS\u003e SubTime (در حال حاضر ()،" 0:10 ")")
-\u003e تعداد ()؛

اگر ($ count_hour\u003e $ limit_hour || $ count_10_min\u003e $ limit_10_min) (
پرتاب استثناء جدید ("بیش از حد بسیاری از تلاش های ورود!")؛
}
}

تابع rate_limit_tick ($ IP، $ ایمیل) (

// ایجاد یک رکورد جدید در جدول ورود به سیستم

$ login_attempt \u003d ORM :: for_table ("reg_login_attempte") -\u003e ایجاد ()؛

$ login_attempt-\u003e ایمیل \u003d $ ایمیل؛
$ login_attempt-\u003e IP \u003d sprintf ("٪ U"، IP2Long ($ IP))؛

$ login_attempt-\u003e ذخیره ()؛
}

تابع تغییر مسیر (url $) (
سربرگ ("محل: $ URL")؛
خروج؛
}
توابع rate_limit و rate_limit_tick به ما اجازه می دهد تا تعداد تلاش های مجوز را برای مدت زمان مشخصی محدود کنیم. تلاش های مجوز در پایگاه داده reg_login_attptem ثبت شده است. این توابع هنگام تایید فرم مجوز آغاز می شود، همانطور که در بخش کد زیر دیده می شود.

کد زیر از index.php گرفته شده است و مسئول تأیید فرم مجوز است. این پاسخ JSON را که توسط کد جی کوئری کنترل می شود، باز می گرداند که ما در دارایی ها / js / script.js دیده ایم.

index.php

اگر (! خالی ($ _ post) && isset ($ _ سرور ["http_x_requested_with"])) (

// خروجی یک هدر JSON

هدر ("نوع محتوا: برنامه / json")؛

// آدرس ایمیل معتبر است؟

اگر (! isset ($ _ post ["email"]) ||! filter_var ($ _ post ["ایمیل"]، filter_validate_email)) (
استثناء جدید را پرتاب کنید ("لطفا یک ایمیل معتبر را وارد کنید")؛
}

// این یک استثناء را پرتاب خواهد کرد اگر فرد بالاتر باشد
// محدودیت ورود به سیستم مجاز (functions.php را برای بیشتر ببینید):
rate_limit ($ _ سرور ["remote_addr"])؛

// ضبط این تلاش ورود به سیستم
rate_limit_tick ($ _ سرور ["Remote_addr"]، $ _POST ["ایمیل"])؛

// ارسال پیام به کاربر

$ message \u003d ""؛
$ ایمیل \u003d $ _POST ["ایمیل"]؛
$ موضوع \u003d "لینک ورود شما"؛

اگر (کاربر :: وجود دارد ($ ایمیل)) (
$ موضوع \u003d "تشکر از شما برای ثبت نام!"؛
$ message \u003d "تشکر از شما برای ثبت نام در سایت ما! \\ n \\ n"؛
}

// تلاش برای ورود یا ثبت نام شخص
$ user \u003d کاربر :: loginorregister ($ _ پست ["ایمیل"])؛

$ پیام \u003d "شما می توانید از این URL وارد شوید: \\ n"؛
$ پیام \u003d get_page_url () "؟ tkn \u003d". $ user-\u003e generatetoken (). "\\ n \\ n"؛

$ پیام \u003d "لینک پس از 10 دقیقه به طور خودکار منقضی می شود."

$ نتیجه \u003d send_email ($ fromemail، $ _post ["ایمیل"]، $ subject، $ پیام)؛

اگر (! $ نتیجه) (
پرتاب استثناء جدید ("یک خطا در ارسال ایمیل شما وجود داشت. لطفا دوباره امتحان کنید")؛
}

مرگ (json_encode (آرایه (
"پیام" \u003d\u003e "متشکرم! ما یک لینک به صندوق پستی خود ارسال کردیم. پوشه اسپم خود را نیز بررسی کنید. "
)));
}
}
گرفتن (استثنا $ e) (

مرگ (json_encode (آرایه (
"خطا" \u003d\u003e 1،
"پیام" \u003d\u003e $ E-\u003e GetMessage ()
)));
}
اگر مجوز یا ثبت نام موفق، کد بالا ایمیل را به یک فرد با لینک برای مجوز اشاره می کند. Token (LEXEME) به عنوان $ _GET-متغیر "TKN" با توجه به URL تولید شده در دسترس می شود.

index.php

اگر (isset ($ _ get ["tkn"])) (

// این یک نشانه ورود معتبر است؟
$ user \u003d کاربر :: findByToken ($ _ get ["tkn"])؛

// آره! کاربر را وارد کنید و به صفحه محافظت شده هدایت شود.

$ user-\u003e ورود ()؛
تغییر مسیر ("protected.php")؛
}

// نشانه نامعتبر بازگشت به فرم ورود به سیستم
تغییر مسیر ("index.php")؛
}
در حال اجرا $ user-\u003e ورود به سیستم () متغیرهای لازم را برای جلسه ایجاد می کند، که به کاربر اجازه می دهد که در ورودی های بعدی مجاز باشد.

خروج از سیستم به همان شیوه تحقق می یابد:

index.php

اگر (isset ($ _ get ["logout"])) (

$ کاربر \u003d کاربر جدید ()؛

اگر ($ user-\u003e loggedin ()) (
$ user-\u003e logout ()؛
}

تغییر مسیر ("index.php")؛
}
در پایان کد، ما دوباره کاربر را در index.php هدایت می کنیم، بنابراین پارامتر؟ ورود به سیستم \u003d 1 در URL حذف می شود.

فایل index.php ما نیز نیاز به حفاظت دارد - ما نمی خواهیم کاربران مجاز به شکل آن را ببینند. برای انجام این کار، از روش $ user-\u003e logged () استفاده می کنیم:

index.php

$ کاربر \u003d کاربر جدید ()؛

اگر ($ user-\u003e loggedin ()) (
تغییر مسیر ("protected.php")؛
}
در نهایت، بیایید ببینیم که چگونه می توانید از صفحه سایت خود محافظت کنید و تنها پس از تأیید آن را در دسترس قرار دهید:

protected.php

// برای محافظت از هر صفحه پی اچ پی در سایت شما، شامل main.php
// و یک شی کاربر جدید ایجاد کنید. ساده است!

نیاز به "شامل / main.php"؛

$ کاربر \u003d کاربر جدید ()؛

اگر ($ user-\u003e loggedin ()) (
تغییر مسیر ("index.php")؛
}
پس از این چک، می توانید مطمئن باشید که کاربر با موفقیت مجاز است. شما همچنین به اطلاعاتی که در پایگاه داده ذخیره می شود، به عنوان خواص Object $ کاربر ذخیره می شود. برای نمایش کاربر ایمیل و رتبه آنها، از کد زیر استفاده کنید:

echo "ایمیل شما:" $ کاربر-\u003e ایمیل؛
echo "رتبه شما:" $ کاربر-\u003e رتبه ()؛
در اینجا رده () یک روش است، از آنجا که ستون رتبه در پایگاه داده معمولا شامل اعداد (0 برای کاربران معمولی و 1 برای مدیران) است، و ما باید همه را در اسامی صفات، که با استفاده از این روش اجرا می شود، آن را تبدیل کنیم. برای تبدیل یک کاربر معمولی به مدیر، به سادگی ضبط کاربر را در phpMyAdmin (یا در هر برنامه پایگاه داده داده های دیگر) ویرایش کنید. داشتن یک مدیر، کاربر با برخی از ویژگی های خاص تأمین نمی شود. شما خودتان را در حق انتخاب حقوق مدیران خود دارید.

آماده!

در این زمینه، سیستم ثبت نام بی تکلف ما آماده است! شما می توانید آن را در سایت پی اچ پی در حال حاضر استفاده کنید، یا برای ارتقاء آن، پیوستن به نیازهای خود را.