Reg.ru: ដែន និងបង្ហោះ
អ្នកចុះបញ្ជីនិងអ្នកផ្តល់សេវាបង្ហោះធំបំផុតនៅក្នុងប្រទេសរុស្ស៊ី។
ឈ្មោះដែនជាង 2 លាននៅក្នុងសេវាកម្ម។
ការផ្សព្វផ្សាយ, អ៊ីមែលដែន, ដំណោះស្រាយអាជីវកម្ម។
អតិថិជនជាង 700 ពាន់នាក់នៅជុំវិញពិភពលោកបានជ្រើសរើសរួចហើយ។
* កណ្ដុរលើដើម្បីផ្អាកការរមូរ។
ថយក្រោយ
បង្កើតប្រព័ន្ធចុះឈ្មោះអ្នកប្រើប្រាស់សាមញ្ញក្នុង PHP និង MySQLការបង្កើតប្រព័ន្ធចុះឈ្មោះគឺជាការងារច្រើន។ អ្នកត្រូវសរសេរកូដដែលធ្វើឱ្យមានសុពលភាពអាសយដ្ឋានអ៊ីមែល ផ្ញើអ៊ីមែលបញ្ជាក់ការចុះឈ្មោះ ហើយក៏ធ្វើឱ្យមានសុពលភាពលើទម្រង់បែបបទផ្សេងទៀត និងច្រើនទៀត។
ហើយសូម្បីតែបន្ទាប់ពីអ្នកសរសេរទាំងអស់នេះ អ្នកប្រើប្រាស់នឹងមានការស្ទាក់ស្ទើរក្នុងការចុះឈ្មោះ ព្រោះ... នេះទាមទារការខិតខំប្រឹងប្រែងខ្លះៗលើផ្នែករបស់ពួកគេ។
នៅក្នុងមេរៀននេះ យើងនឹងបង្កើតប្រព័ន្ធចុះឈ្មោះដ៏សាមញ្ញបំផុត ដែលមិនទាមទារ ឬរក្សាទុកពាក្យសម្ងាត់អ្វីទាំងអស់! លទ្ធផលនឹងងាយស្រួលក្នុងការកែប្រែ និងបន្ថែមទៅគេហទំព័រ PHP ដែលមានស្រាប់។ ចង់ដឹងថាវាដំណើរការយ៉ាងដូចម្តេច? សូមអានខាងក្រោម។
នេះជារបៀបដែលប្រព័ន្ធសាមញ្ញទំនើបរបស់យើងនឹងដំណើរការ៖
យើងនឹងបញ្ចូលគ្នានូវទម្រង់ការអនុញ្ញាត និងការចុះឈ្មោះ។ ទម្រង់នេះនឹងមានវាលសម្រាប់បញ្ចូលអាសយដ្ឋានអ៊ីមែលរបស់អ្នក និងប៊ូតុងចុះឈ្មោះ។
- នៅពេលបំពេញវាលជាមួយអាសយដ្ឋានអ៊ីមែល ចុចលើប៊ូតុងចុះឈ្មោះនឹងបង្កើតកំណត់ត្រាអំពីអ្នកប្រើប្រាស់ថ្មី ប៉ុន្តែប្រសិនបើអាសយដ្ឋានអ៊ីមែលដែលបានបញ្ចូលមិនត្រូវបានរកឃើញនៅក្នុងមូលដ្ឋានទិន្នន័យ។
បន្ទាប់ពីនេះ សំណុំតួអក្សរចៃដន្យ (សញ្ញាសម្ងាត់) ត្រូវបានបង្កើតឡើង ដែលត្រូវបានផ្ញើទៅកាន់អ៊ីមែលដែលបញ្ជាក់ដោយអ្នកប្រើប្រាស់ក្នុងទម្រង់ជាតំណភ្ជាប់ដែលនឹងពាក់ព័ន្ធរយៈពេល 10 នាទី;
- តំណភ្ជាប់នាំអ្នកប្រើប្រាស់ទៅកាន់គេហទំព័ររបស់យើង។ ប្រព័ន្ធកំណត់វត្តមាននៃសញ្ញាសម្ងាត់ និងផ្តល់សិទ្ធិឱ្យអ្នកប្រើប្រាស់។
គុណសម្បត្តិនៃវិធីសាស្រ្តនេះ៖
មិនចាំបាច់រក្សាទុកពាក្យសម្ងាត់ ឬធ្វើឱ្យវាលមានសុពលភាពទេ។
- មិនចាំបាច់សង្គ្រោះពាក្យសម្ងាត់របស់អ្នក សំណួរសុវត្ថិភាពជាដើម។
- ចាប់ពីពេលដែលអ្នកប្រើប្រាស់ចុះឈ្មោះ/ចូល អ្នកតែងតែអាចប្រាកដថាអ្នកប្រើប្រាស់នេះនឹងស្ថិតនៅក្នុងតំបន់ចូលប្រើរបស់អ្នក (ដែលអាសយដ្ឋានអ៊ីមែលគឺពិត);
- ដំណើរការចុះឈ្មោះសាមញ្ញមិនគួរឱ្យជឿ;
គុណវិបត្តិ៖
សុវត្ថិភាពគណនីអ្នកប្រើប្រាស់។ ប្រសិនបើនរណាម្នាក់មានសិទ្ធិចូលប្រើសំបុត្ររបស់អ្នកប្រើប្រាស់ ពួកគេអាចចូលបាន។
- អ៊ីមែលមិនមានសុវត្ថិភាព និងអាចស្ទាក់ចាប់បាន។ សូមចងចាំថាសំណួរនេះក៏ពាក់ព័ន្ធផងដែរក្នុងករណីដែលពាក្យសម្ងាត់ត្រូវបានបំភ្លេចចោល ហើយត្រូវការស្ដារឡើងវិញ ឬនៅក្នុងប្រព័ន្ធអនុញ្ញាតណាមួយដែលមិនប្រើ HTTPS សម្រាប់ការផ្ទេរទិន្នន័យ (ចូល/ពាក្យសម្ងាត់)។
- ខណៈពេលដែលអ្នកកំណត់រចនាសម្ព័ន្ធម៉ាស៊ីនមេសំបុត្ររបស់អ្នកបានត្រឹមត្រូវ វាមានឱកាសដែលសារដែលមានតំណភ្ជាប់អនុញ្ញាតនឹងបញ្ចប់ដោយសារឥតបានការ។
ការប្រៀបធៀបគុណសម្បត្តិ និងគុណវិបត្តិនៃប្រព័ន្ធរបស់យើង យើងអាចនិយាយបានថាប្រព័ន្ធមានលទ្ធភាពប្រើប្រាស់ខ្ពស់ (ភាពងាយស្រួលជាអតិបរមាសម្រាប់អ្នកប្រើប្រាស់ចុងក្រោយ) ហើយក្នុងពេលតែមួយមានសូចនាករសុវត្ថិភាពទាប។
ដូច្នេះវាត្រូវបានស្នើឱ្យប្រើវាសម្រាប់ការចុះឈ្មោះនៅលើវេទិកានិងសេវាកម្មដែលមិនដំណើរការជាមួយព័ត៌មានសំខាន់ៗ។
របៀបប្រើប្រព័ន្ធនេះ។
ក្នុងករណីដែលអ្នកគ្រាន់តែត្រូវប្រើប្រព័ន្ធដើម្បីអនុញ្ញាតអ្នកប្រើប្រាស់នៅលើគេហទំព័ររបស់អ្នក ហើយអ្នកមិនចង់យកមេរៀននេះទៅជាបំណែកៗទេ នេះជាអ្វីដែលអ្នកត្រូវធ្វើ៖
អ្នកត្រូវទាញយកប្រភពដែលភ្ជាប់មកជាមួយមេរៀន
- ស្វែងរកឯកសារ tables.sql ក្នុងប័ណ្ណសារ នាំចូលវាទៅក្នុងមូលដ្ឋានទិន្នន័យរបស់អ្នកដោយប្រើជម្រើសនាំចូលក្នុង phpMyAdmin ។ វិធីជំនួស៖ បើកឯកសារនេះតាមរយៈកម្មវិធីនិពន្ធអត្ថបទ ចម្លងសំណួរ SQL ហើយប្រតិបត្តិវា។
- បើក include/main.php ហើយបំពេញការកំណត់សម្រាប់ភ្ជាប់ជាមួយ database របស់អ្នក (បញ្ជាក់ user និង password សម្រាប់ភ្ជាប់ជាមួយ database ក៏ដូចជា host និងឈ្មោះ database)។ នៅក្នុងឯកសារដូចគ្នា អ្នកក៏ត្រូវបញ្ជាក់អ៊ីមែលផងដែរ ដែលនឹងត្រូវប្រើជាអាសយដ្ឋានដើមសម្រាប់សារដែលប្រព័ន្ធផ្ញើមក។ ម៉ាស៊ីនខ្លះរារាំងអ៊ីមែលចេញ លុះត្រាតែទម្រង់មានអាសយដ្ឋានអ៊ីមែលពិតប្រាកដ ដែលត្រូវបានបង្កើតចេញពីផ្ទាំងបញ្ជារបស់ម៉ាស៊ីន ដូច្នេះសូមផ្តល់អាសយដ្ឋានពិតប្រាកដ។
- ផ្ទុកឡើងទាំងអស់ index.php ឯកសារ និងទ្រព្យសកម្មការពារ និងរួមបញ្ចូលថតឯកសារតាមរយៈ FTP ទៅកាន់ម៉ាស៊ីនរបស់អ្នក
- បន្ថែមកូដខាងក្រោមទៅទំព័រ PHP នីមួយៗដែលអ្នកចង់បង្ហាញទម្រង់ចូល។
Require_once "includes/main.php"; $user = អ្នកប្រើប្រាស់ថ្មី(); if(!$user->loggedIn())( redirect("index.php"); )
-រួចរាល់ហើយ!
សម្រាប់អ្នកដែលចាប់អារម្មណ៍ថាវាដំណើរការយ៉ាងណានោះ សូមអាននៅខាងក្រោម!
ជំហានដំបូងគឺត្រូវសរសេរកូដ HTM សម្រាប់ទម្រង់ការអនុញ្ញាត។ កូដនេះមានទីតាំងនៅក្នុងឯកសារ index.php ។ ឯកសារនេះក៏មានកូដ PHP ដែលគ្រប់គ្រងទិន្នន័យទម្រង់ និងមុខងារប្រព័ន្ធចូលមានប្រយោជន៍ផ្សេងទៀត។ អ្នកអាចស្វែងយល់បន្ថែមអំពីបញ្ហានេះនៅក្នុងផ្នែកខាងក្រោមដែលឧទ្ទិសដល់ការពិនិត្យកូដ PHP ។
index.php
ការបង្រៀន៖ ប្រព័ន្ធចុះឈ្មោះសាមញ្ញទំនើបជាមួយ PHP & MySQL ចូល ឬចុះឈ្មោះ
បញ្ចូលអាសយដ្ឋានអ៊ីមែលរបស់អ្នកខាងលើ ហើយយើងនឹងផ្ញើ
អ្នកជាតំណចូល។
នៅក្នុងផ្នែកក្បាល (រវាងនិងស្លាក) ខ្ញុំបានបញ្ចូលរចនាប័ទ្មសំខាន់ៗ (ពួកវាមិនត្រូវបានគ្របដណ្តប់នៅក្នុងមេរៀននេះទេ ដូច្នេះអ្នកអាចមើលពួកវាដោយខ្លួនឯងបាន។ Folder assets/css/style.css) ។ មុនពេលបិទស្លាក ខ្ញុំបានបញ្ចូលបណ្ណាល័យ jQuery និងឯកសារ script.js ដែលយើងនឹងសរសេរ និងវិភាគខាងក្រោម។
JavaScript
jQuery តាមដានស្ថានភាពនៃប៊ូតុង "ចុះឈ្មោះ/ចូល" ដោយប្រើមុខងារ e.preventDefault()ហើយផ្ញើសំណើ AJAX ។ អាស្រ័យលើការឆ្លើយតបរបស់ម៉ាស៊ីនមេ វាបង្ហាញសារមួយ ឬមួយផ្សេងទៀត ហើយកំណត់សកម្មភាពបន្ថែម/
ទ្រព្យសកម្ម/js/script.js
$(function())(var form = $("#login-register"); form.on("submit", function(e)( if(form.is(.loading, .loggedIn")))( return false ; ) var email = form.find("input").val(), messageHolder = form.find("span"); $.post(this.action, (email: email), function (m)( if (m.error)(form.addClass("error"); messageHolder.text(m.message); ) else( form.removeClass("error").addClass("loggedIn"); messageHolder. text(m.message ); ) )); $(document).ajaxStart(function())(form.addClass("loading"); )); ;
ត្រូវបានបន្ថែមទៅក្នុងទម្រង់ដើម្បីបង្ហាញស្ថានភាពបច្ចុប្បន្ននៃសំណើ AJAX (នេះអាចធ្វើទៅបានដោយសារវិធីសាស្ត្រ ajaxStart()) និង ajaxComplete()ដែលអ្នកអាចរកបាននៅចុងបញ្ចប់នៃឯកសារ) ។ថ្នាក់នេះបង្ហាញឯកសារ GIF ដែលមានចលនាបង្វិល (ដូចជាដើម្បីប្រាប់យើងថាសំណើនេះកំពុងដំណើរការ) ហើយក៏ដើរតួជាទង់ដើម្បីការពារទម្រង់ពីការបញ្ជូនម្តងទៀត (នៅពេលដែលប៊ូតុងចុះឈ្មោះត្រូវបានចុចម្តងរួចហើយ)។ ថ្នាក់ .loggedIn គឺជាទង់មួយផ្សេងទៀត - វាត្រូវបានកំណត់នៅពេលដែលអ៊ីមែលត្រូវបានផ្ញើ។ ទង់នេះរារាំងសកម្មភាពបន្ថែមទៀតជាមួយទម្រង់ភ្លាមៗ។
គ្រោងការណ៍មូលដ្ឋានទិន្នន័យ
ប្រព័ន្ធកត់ត្រាដ៏សាមញ្ញមិនគួរឱ្យជឿរបស់យើងប្រើតារាង MySQL ចំនួន 2 (កូដ SQL គឺនៅក្នុងឯកសារ tables.sql)។ ទីមួយរក្សាទុកទិន្នន័យអំពីគណនីអ្នកប្រើប្រាស់។ ទីពីររក្សាទុកព័ត៌មានអំពីចំនួននៃការព្យាយាមចូល។
គ្រោងការណ៍តារាងអ្នកប្រើប្រាស់។
ប្រព័ន្ធមិនប្រើពាក្យសម្ងាត់ដូចដែលអាចមើលឃើញនៅក្នុងដ្យាក្រាមទេ។ នៅលើវា អ្នកអាចមើលឃើញជួរឈរនិមិត្តសញ្ញាដែលមានសញ្ញាសម្ងាត់នៅជាប់នឹងជួរឈរ token_validity ។ សញ្ញាសម្ងាត់ត្រូវបានដំឡើងភ្លាមៗនៅពេលដែលអ្នកប្រើប្រាស់ភ្ជាប់ទៅប្រព័ន្ធ ហើយកំណត់អ៊ីមែលរបស់គាត់ឱ្យផ្ញើសារ (បន្ថែមលើវានៅក្នុងប្លុកបន្ទាប់)។ ជួរឈរ token_validity កំណត់ពេលវេលា 10 នាទីក្រោយមក បន្ទាប់មក token លែងមានសុពលភាពទៀតហើយ។
គ្រោងការណ៍តារាងដែលរាប់ចំនួននៃការព្យាយាមអនុញ្ញាត។
នៅក្នុងតារាងទាំងពីរ អាសយដ្ឋាន IP ត្រូវបានរក្សាទុកក្នុងទម្រង់ដំណើរការ ដោយប្រើមុខងារ ip2long នៅក្នុងវាលនៃប្រភេទចំនួនគត់។
ឥឡូវនេះយើងអាចសរសេរកូដ PHP មួយចំនួន។ មុខងារសំខាន់នៃប្រព័ន្ធត្រូវបានចាត់ថ្នាក់ User.class.php ដែលអ្នកអាចមើលឃើញខាងក្រោម។
ថ្នាក់នេះប្រើប្រាស់យ៉ាងសកម្ម idorm (docs) បណ្ណាល័យទាំងនេះគឺជាឧបករណ៍ចាំបាច់អប្បបរមាសម្រាប់ធ្វើការជាមួយមូលដ្ឋានទិន្នន័យ។ វាគ្រប់គ្រងការចូលប្រើមូលដ្ឋានទិន្នន័យ ការបង្កើតសញ្ញាសម្ងាត់ និងសុពលភាពសញ្ញាសម្ងាត់។ វាផ្តល់នូវចំណុចប្រទាក់សាមញ្ញដែលធ្វើឱ្យវាងាយស្រួលក្នុងការភ្ជាប់ប្រព័ន្ធចុះឈ្មោះទៅគេហទំព័ររបស់អ្នកប្រសិនបើវាប្រើ PHP ។
User.class.php
អ្នកប្រើប្រាស់ថ្នាក់( // ករណី ORM ឯកជនឯកជន $orm; /** * ស្វែងរកអ្នកប្រើប្រាស់ដោយសញ្ញាសម្ងាត់។ មានតែសញ្ញាសម្ងាត់ត្រឹមត្រូវប៉ុណ្ណោះដែលត្រូវបានទទួលយកសម្រាប់ការពិចារណា។ និមិត្តសញ្ញាត្រូវបានបង្កើតឡើងត្រឹមតែ 10 នាទីប៉ុណ្ណោះចាប់ពីពេលដែលវាត្រូវបានបង្កើត * @param string $token .នេះគឺជាសញ្ញាសម្គាល់ដែលយើងកំពុងស្វែងរក * @return User ត្រឡប់តម្លៃនៃមុខងារ User */ public static function findByToken($token)(// ស្វែងរក token ក្នុង database ហើយត្រូវប្រាកដថា timestamp ត្រឹមត្រូវត្រូវបានកំណត់ $។ លទ្ធផល = ORM::for_table("reg_users") -> where ("token", $token) ->where_raw("token_validity> NOW()") ->find_one(); if(!$result)( return false; ) ត្រឡប់អ្នកប្រើប្រាស់ថ្មី($ លទ្ធផល) /** *); មានរួចហើយ ត្រឡប់តម្លៃនៃមុខងារ User ពីអាសយដ្ឋានអ៊ីមែលដែលបានបញ្ជាក់ដែលបានរក្សាទុកក្នុងមូលដ្ឋានទិន្នន័យ ប្រសិនបើ(User::exists($email))( return new User($email); ) // បើមិនដូច្នេះទេ បង្កើតអ្នកប្រើប្រាស់ថ្មីនៅក្នុង មូលដ្ឋានទិន្នន័យ និងត្រឡប់តម្លៃរបស់អ្នកប្រើ::បង្កើតមុខងារពីអ៊ីមែលដែលបានបញ្ជាក់ ត្រឡប់អ្នកប្រើប្រាស់::create($email); ) /** * បង្កើតអ្នកប្រើប្រាស់ថ្មី ហើយរក្សាទុកក្នុងមូលដ្ឋានទិន្នន័យ * @param string $email ។ អាសយដ្ឋានអ៊ីមែលរបស់អ្នកប្រើ * @return User */ មុខងារឋិតិវន្តឯកជន create($email)( // សរសេរអ្នកប្រើប្រាស់ថ្មី ហើយត្រឡប់លទ្ធផលនៃមុខងារ User ពីតម្លៃទាំងនេះ $result = ORM::for_table("reg_users")- >create(); $result->email = $email; $result->save(); ត្រឡប់អ្នកប្រើប្រាស់ថ្មី($result); អថេរ * @param string $email ។ អាសយដ្ឋានអ៊ីមែលរបស់អ្នកប្រើ * @return boolean */ មុខងារឋិតិវន្តសាធារណៈមាន($email)( // តើអ្នកប្រើប្រាស់មាននៅក្នុងមូលដ្ឋានទិន្នន័យទេ? $result = ORM::for_table("reg_users") -> where("email", $email ) -> count(); ត្រឡប់ $result == 1; null) ( if($param instanceof ORM)( // ORM check passed $this->orm = $param; ) else if(is_string($param))( // ការពិនិត្យអ៊ីមែលបានឆ្លងកាត់ $this->orm = ORM:: for_table ("reg_users") -> where("email", $param) ->find_one(); លេខសម្គាល់ត្រូវបានបញ្ជូនទៅឧបករណ៍កំណត់អត្តសញ្ញាណអ្នកប្រើប្រាស់ = $param ) ផ្សេងទៀតប្រសិនបើ(isset($_SESSION["loginid"]))( // បើមិនដូច្នេះទេសូមមើលវគ្គ $id = $_SESSION["loginid"]; ) $this->orm =ORM::for_table( "reg_users") -> where("id", $id) ->find_one() ) /** * បង្កើតសញ្ញាសម្គាល់ការអនុញ្ញាត SHA1 ថ្មី សរសេរវាទៅមូលដ្ឋានទិន្នន័យ ហើយត្រឡប់តម្លៃរបស់វា * @ return string */ public function generateToken( )( // បង្កើតសញ្ញាសម្ងាត់សម្រាប់អ្នកប្រើប្រាស់ដែលមានការអនុញ្ញាត ហើយរក្សាទុកវាទៅក្នុង database $token = sha1($this->email.time().rand(0, 1000000)); // រក្សាទុកនិមិត្តសញ្ញានៅក្នុងមូលដ្ឋានទិន្នន័យ // ហើយសម្គាល់វាដើម្បីឱ្យវាមានសុពលភាពត្រឹមតែ 10 នាទីបន្ទាប់ $this->orm->set("token", $token); $this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")"); $this->orm->save(); ត្រឡប់ $token; ) /** * ផ្តល់សិទ្ធិឱ្យអ្នកប្រើប្រាស់ * @return void */ public function login())( // សម្គាល់អ្នកប្រើប្រាស់ថាបានចូល $_SESSION["loginid"] = $this->orm->id; // Update the តម្លៃនៃវាលមូលដ្ឋានទិន្នន័យ last_login $this->orm->set_expr("last_login", "NOW()"); $this->orm->save() /** * បំផ្លាញវគ្គ និងចេញពីអ្នកប្រើប្រាស់ * @return void */ public function logout ()($_SESSION = array(); unset($_SESSION); ) /** * ពិនិត្យមើលថាតើអ្នកប្រើប្រាស់បានចូល * @return boolean */ public function loggedIn())( return isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id ) /** * ពិនិត្យមើលថាតើអ្នកប្រើប្រាស់ជាអ្នកគ្រប់គ្រង * @return boolean */ មុខងារសាធារណៈ isAdmin())( return $this->rank() = = "administrator"; ) /** * ស្វែងរកប្រភេទអ្នកប្រើប្រាស់ អាចជាអ្នកគ្រប់គ្រង ឬធម្មតា * @return string */ public function rank())( if( $this->orm->rank == 1)( return "administrator" ";) return "regular"; ) /** * វិធីសាស្រ្តដែលអនុញ្ញាតឱ្យអ្នកទទួលបានព័ត៌មានឯកជនរបស់អ្នកប្រើជា * លក្ខណសម្បត្តិរបស់ User object * @param string $key ឈ្មោះរបស់ទ្រព្យដែលទទួលបានការចូលប្រើ * @return លាយ */ មុខងារសាធារណៈ __get($key)( if(isset($this->orm->$key))( return $this->orm->$ គន្លឹះ; ) ត្រឡប់ null; ))
ថូខឹនត្រូវបានបង្កើតដោយប្រើក្បួនដោះស្រាយ SHA1 និងរក្សាទុកក្នុងមូលដ្ឋានទិន្នន័យ។ ខ្ញុំកំពុងប្រើមុខងារកំណត់ពេលវេលារបស់ MySQL ដើម្បីកំណត់ពេលវេលា 10 នាទីសម្រាប់សុពលភាពរបស់សញ្ញាសម្ងាត់។
នៅពេលដែលសញ្ញាសម្ងាត់ត្រូវបានធ្វើឱ្យមានសុពលភាព យើងប្រាប់ដោយផ្ទាល់ទៅអ្នកដោះស្រាយថាយើងកំពុងពិចារណាតែសញ្ញាសម្ងាត់ដែលមិនទាន់ផុតកំណត់ ត្រូវបានរក្សាទុកនៅក្នុងជួរឈរ token_validity ។
សូមចំណាំថាខ្ញុំកំពុងប្រើវិធីវេទមន្ត __ទទួលបានបណ្ណាល័យឯកសារនៅចុងបញ្ចប់នៃឯកសារដើម្បីស្ទាក់ចាប់ការចូលប្រើលក្ខណៈសម្បត្តិរបស់វត្ថុអ្នកប្រើប្រាស់។
សូមអរគុណចំពោះបញ្ហានេះ វាអាចចូលប្រើព័ត៌មានដែលរក្សាទុកក្នុងមូលដ្ឋានទិន្នន័យដោយអរគុណចំពោះលក្ខណៈសម្បត្តិ $user->email, $user->token ។ល។ នៅក្នុងបំណែកកូដបន្ទាប់ យើងនឹងពិនិត្យមើលរបៀបប្រើថ្នាក់ទាំងនេះជាឧទាហរណ៍ .
ទំព័រការពារ
ឯកសារមួយទៀតដែលរក្សាទុកមុខងារមានប្រយោជន៍ និងចាំបាច់គឺឯកសារ functions.php ។ មានមុខងារជាច្រើនដែលហៅថាជំនួយ - មុខងារជំនួយដែលអនុញ្ញាតឱ្យអ្នកបង្កើតកូដស្អាត និងអាចអានបានច្រើននៅក្នុងឯកសារផ្សេងទៀត។
functions.php
មុខងារ send_email($from, $to, $subject, $message)( // Helper that sends email $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Content-type: text /plain; charset=utf-8" . "\r\n"; $headers .= "From: ".$from . "\r\n"; return mail($to, $subject, $message, $headers ); ) មុខងារ get_page_url())( // កំណត់ URL នៃឯកសារ PHP $url = "http"(ទទេ($_SERVER["HTTPS"])?"":"s")"://" .$_SERVER ["SERVER_NAME"]; $url. = $_SERVER["PATH_INFO"]; =ORM: :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(),"1:00" )") -> count(); // ចំនួននៃការព្យាយាមចូលក្នុងរយៈពេល 10 នាទីចុងក្រោយសម្រាប់អាសយដ្ឋាន IP នេះ $count_10_min = ORM::for_table("reg_login_attempt") -> where("ip", sprintf("%u" , ip2long($ ip))) ->where_raw("ts > SUBTIME(),"0:10")") ->count(); if($count_hour> $limit_hour || $count_10_min> $limit_10_min)( throw new Exception("ការព្យាយាមចូលច្រើនពេក!"); )) function rate_limit_tick($ip, $email)( // បង្កើតកំណត់ត្រាថ្មីក្នុងតារាង ដែលរាប់ចំនួននៃការព្យាយាមចូល $login_attempt = ORM::for_table("reg_login_attempt")->create(); $login_attempt->email = $email; $login_attempt->ip = sprintf("%u", ip2long($ip )); $login_attempt->save(); ) មុខងារបញ្ជូនបន្ត($url)(បឋមកថា("ទីតាំង៖ $url"); ចេញ;
មុខងារ rate_limitនិង rate_limit_tickតាមដានចំនួននៃការប៉ុនប៉ងអនុញ្ញាតក្នុងរយៈពេលដែលបានកន្លងផុតទៅចាប់តាំងពីការប៉ុនប៉ងលើកដំបូង។ ការប៉ុនប៉ងចូលត្រូវបានកត់ត្រានៅក្នុងមូលដ្ឋានទិន្នន័យនៅក្នុងជួរឈរ reg_login_attempt ។ មុខងារទាំងនេះត្រូវបានហៅនៅពេលដែលទិន្នន័យទម្រង់ត្រូវបានដំណើរការ និងដាក់បញ្ជូន ដូចដែលអ្នកអាចមើលឃើញពីអត្ថបទកូដខាងក្រោម។
កូដខាងក្រោមត្រូវបានយកចេញពីឯកសារ index.php ហើយវាគ្រប់គ្រងការបញ្ជូនទម្រង់។ វាត្រឡប់ការឆ្លើយតប JSON ដែលនៅក្នុងវេនត្រូវបានដំណើរការដោយ jQuery នៅក្នុងឯកសារទ្រព្យសកម្ម/js/script.js ដែលយើងមើលពីមុន។
index.php
សាកល្បង( if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"])))( // បញ្ចេញបឋមកថា JSON ("ប្រភេទមាតិកា៖ application/json"); // តើអាសយដ្ឋានអ៊ីមែលនេះមានសុពលភាពដែរឬទេ ប្រសិនបើ (!isset($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))(បោះ Exception ថ្មី("សូមបញ្ចូលអ៊ីមែលត្រឹមត្រូវ។"); ) // ពិនិត្យ អ្នកប្រើបានអនុញ្ញាតឱ្យចូល តើគាត់បានលើសចំនួននៃការតភ្ជាប់ដែលបានអនុញ្ញាតហើយឬនៅ? (ឯកសារ functions.php សម្រាប់ព័ត៌មានបន្ថែម) rate_limit($_SERVER["REMOTE_ADDR"]); , $ _POST["email"]); // ផ្ញើអ៊ីមែលទៅអ្នកប្រើប្រាស់ $message = ""; សូមអរគុណសម្រាប់ការចុះឈ្មោះ!"; $message = "សូមអរគុណសម្រាប់ការចុះឈ្មោះនៅលើគេហទំព័ររបស់យើង!\n\n"; ) // ព្យាយាមអនុញ្ញាត ឬចុះឈ្មោះអ្នកប្រើប្រាស់ $user = User::loginOrRegister($_POST["email"] ); $message.= "អ្នកអាចចូលពី URL នេះ៖\n"; $message.= get_page_url()"?tkn=".$user->generateToken()"\n\n"; $message.= "តំណនឹងផុតកំណត់ដោយស្វ័យប្រវត្តិបន្ទាប់ពី 10 នាទី"; $result = send_email($fromEmail, $_POST["email"], $subject, $message); if(!$result)( throw new Exception("មានកំហុសក្នុងការផ្ញើអ៊ីមែលរបស់អ្នក។ សូមព្យាយាមម្តងទៀត។"); ) die(json_encode(array("message") => "សូមអរគុណ! ពួកយើង\"បានផ្ញើតំណ ទៅកាន់ប្រអប់ទទួលរបស់អ្នក។ ពិនិត្យមើលថតសារឥតបានការរបស់អ្នកផងដែរ។"))); )) catch(Exception $e)( die(json_encode(array("error"=>1, "message")" => $e->getMessage() )));
បន្ទាប់ពីការចូល/ចុះឈ្មោះដោយជោគជ័យ លេខកូដខាងលើនឹងផ្ញើឱ្យអ្នកប្រើប្រាស់នូវតំណភ្ជាប់ចូល។ សញ្ញាសម្ងាត់ក្លាយជាអាចប្រើបានដោយសារតែ វាត្រូវបានឆ្លងកាត់ជាអថេរនៅក្នុងតំណភ្ជាប់ដែលបានបង្កើតដោយវិធីសាស្ត្រ $_GETជាមួយសញ្ញាសម្គាល់ tkn
index.php
If(isset($_GET["tkn"]))( // តើសញ្ញាសម្ងាត់នេះមានសុពលភាពសម្រាប់ការអនុញ្ញាតទេ? $user = User::findByToken($_GET["tkn"]); if($user)( // បាទ , ប្តូរទិសទៅទំព័រដែលបានការពារ $user->login(); ) ");)
$user->login()
នឹងបង្កើតអថេរចាំបាច់សម្រាប់វគ្គ ដូច្នេះអ្នកប្រើប្រាស់ដែលមើលទំព័របន្តបន្ទាប់នៃគេហទំព័រនឹងនៅតែអនុញ្ញាតគ្រប់ពេលវេលា។
ដំណើរការនៃមុខងារដើម្បីចេញពីប្រព័ន្ធត្រូវបានរៀបចំតាមរបៀបស្រដៀងគ្នា។
index.php
If(isset($_GET["logout"]))($user = new User(); if($user->loggedIn())($user->logout(); ) redirect("index.php") ;)
នៅចុងបញ្ចប់នៃកូដ ខ្ញុំបានកំណត់ការបញ្ជូនបន្តទៅកាន់ index.php ម្តងទៀត ដូច្នេះប៉ារ៉ាម៉ែត្រ ?logout=1ការបញ្ជូនតាម URL មិនត្រូវបានទាមទារទេ។
ឯកសារ index.php របស់យើងទាមទារបន្ថែម។ ការការពារ - យើងមិនចង់ឱ្យអ្នកដែលបានចូលទៅក្នុងប្រព័ន្ធមើលឃើញទម្រង់ចុះឈ្មោះម្តងទៀតទេ។ សម្រាប់គោលបំណងទាំងនេះយើងប្រើវិធីសាស្រ្ត $user->loggedIn().
index.php
$user = អ្នកប្រើប្រាស់ថ្មី(); if($user->loggedIn())( redirect("protected.php"); )
ចុងក្រោយ នេះជាកូដមួយដែលអនុញ្ញាតឱ្យអ្នកការពារទំព័រនៃគេហទំព័ររបស់អ្នក និងធ្វើឱ្យវាអាចចូលដំណើរការបានលុះត្រាតែមានការអនុញ្ញាត។
protected.php
// ដើម្បីការពាររាល់ទំព័រនៅលើគេហទំព័ររបស់អ្នក សូមបញ្ចូលឯកសារ main.php // ហើយបង្កើត User object ថ្មី។ នោះជាការងាយស្រួល! require_once "includes/main.php"; $user = អ្នកប្រើប្រាស់ថ្មី(); if(!$user->loggedIn())( redirect("index.php"); )
បន្ទាប់ពីការត្រួតពិនិត្យនេះ អ្នកអាចប្រាកដថាអ្នកប្រើប្រាស់ត្រូវបានអនុញ្ញាតដោយជោគជ័យ។ អ្នកក៏អាចចូលប្រើព័ត៌មានដែលបានរក្សាទុកក្នុងមូលដ្ឋានទិន្នន័យដោយប្រើលក្ខណសម្បត្តិរបស់វត្ថុ $ អ្នកប្រើប្រាស់. ដើម្បីបង្ហាញអ៊ីមែល និងស្ថានភាពរបស់អ្នកប្រើ សូមប្រើលេខកូដនេះ៖
បន្ទរ "អ៊ីមែលរបស់អ្នក៖ ".$user->email; បន្ទរ "ចំណាត់ថ្នាក់របស់អ្នក៖ ".$user->rank();
វិធីសាស្រ្ត ចំណាត់ថ្នាក់()ត្រូវបានប្រើនៅទីនេះ ដោយសារមូលដ្ឋានទិន្នន័យជាធម្មតារក្សាទុកលេខ (0 សម្រាប់អ្នកប្រើប្រាស់ធម្មតា 1 សម្រាប់អ្នកគ្រប់គ្រង) ហើយយើងត្រូវបំប្លែងទិន្នន័យនេះទៅជាស្ថានភាពដែលពួកគេជាកម្មសិទ្ធិ ដែលជាវិធីសាស្ត្រនេះជួយយើង។
ដើម្បីធ្វើឱ្យអ្នកប្រើប្រាស់ធម្មតាក្លាយជាអ្នកគ្រប់គ្រង គ្រាន់តែកែសម្រួលធាតុអ្នកប្រើប្រាស់តាមរយៈ phpMyAdmin (ឬកម្មវិធីផ្សេងទៀតដែលអនុញ្ញាតឱ្យអ្នកគ្រប់គ្រងមូលដ្ឋានទិន្នន័យ)។ ស្ថានភាពអ្នកគ្រប់គ្រងមិនផ្តល់សិទ្ធិណាមួយទេ ក្នុងឧទាហរណ៍នេះ ទំព័រនឹងបង្ហាញថាអ្នកជាអ្នកគ្រប់គ្រង - នោះហើយជាវា។
ប៉ុន្តែអ្វីដែលត្រូវធ្វើជាមួយនេះ គឺទុកជាការសំរេចចិត្តរបស់អ្នក អ្នកអាចសរសេរ និងសរសេរកូដដោយខ្លួនឯង ដែលកំណត់សិទ្ធិ និងសមត្ថភាពជាក់លាក់សម្រាប់អ្នកគ្រប់គ្រង។
យើងរួចរាល់ហើយ!
យើងបានបញ្ចប់ជាមួយនឹងរូបរាងដ៏សាមញ្ញបំផុតមិនគួរឱ្យជឿនេះ! អ្នកអាចប្រើវានៅក្នុងគេហទំព័រ PHP របស់អ្នក វាសាមញ្ញណាស់។ អ្នកក៏អាចកែប្រែវាដោយខ្លួនឯង ហើយធ្វើវាតាមដែលអ្នកចង់បាន។
សម្ភារៈត្រូវបានរៀបចំដោយ Denis Malyshok ជាពិសេសសម្រាប់គេហទំព័រ
P.S. តើអ្នកចង់ផ្លាស់ទីបន្ថែមទៀតក្នុងជំនាញ PHP និង OOP ដែរឬទេ? យកចិត្តទុកដាក់លើមេរៀនពិសេសលើទិដ្ឋភាពផ្សេងៗនៃការកសាងគេហទំព័រ រួមទាំងការសរសេរកម្មវិធីនៅក្នុង PHP ក៏ដូចជាវគ្គសិក្សាឥតគិតថ្លៃស្តីពីការបង្កើតប្រព័ន្ធ CMS ផ្ទាល់ខ្លួនរបស់អ្នកនៅក្នុង PHP ពីដំបូងដោយប្រើ OOP៖
តើអ្នកចូលចិត្តសម្ភារៈ និងចង់អរគុណខ្ញុំទេ?
គ្រាន់តែចែករំលែកជាមួយមិត្តភ័ក្តិ និងសហការីរបស់អ្នក!
កែប្រែចុងក្រោយនៅថ្ងៃទី 23 ខែកក្កដា ឆ្នាំ 2019 ដោយ Vincy។
ការចុះឈ្មោះអ្នកប្រើប្រាស់ ឬចុះឈ្មោះគឺជាផ្នែកសំខាន់មួយនៃកម្មវិធីគេហទំព័រជាច្រើន ហើយវាមានសារៈសំខាន់ណាស់ក្នុងការទទួលបានវាឱ្យត្រឹមត្រូវសម្រាប់ភាពជោគជ័យនៃកម្មវិធី។ វាគឺជាចំណុចចាប់ផ្តើមនៃការចូលរួមរបស់អ្នកប្រើប្រាស់ជាមួយកម្មវិធីរបស់អ្នក។
វាគួរតែសាមញ្ញតាមដែលអាចធ្វើទៅបានជាមួយនឹង UI / UX ល្អបំផុត។ ការអនុវត្តមុខងារចុះឈ្មោះអ្នកប្រើប្រាស់ដោយប្រើ PHP គឺជាកិច្ចការដ៏សាមញ្ញមួយ ហើយខ្ញុំនឹងណែនាំអ្នកតាមជំហានជាមួយនឹងឧទាហរណ៍នៅក្នុងអត្ថបទនេះ។
តើមានអ្វីនៅខាងក្នុង? តើឧទាហរណ៍ការចុះឈ្មោះអ្នកប្រើប្រាស់ PHP នេះដំណើរការយ៉ាងដូចម្តេច?កូដឧទាហរណ៍នេះអាចបែងចែកជា 3 ផ្នែក។
ជំហានទីបីនឹងត្រូវបានប្រតិបត្តិបន្ទាប់ពីធានាថាអ្នកប្រើប្រាស់មិនត្រូវបានបន្ថែមរួចហើយ។ ការផ្ទៀងផ្ទាត់ភាពឯកតាទិន្នន័យនេះនឹងត្រូវបានអនុវត្តដោយផ្អែកលើអ៊ីមែល និងឈ្មោះអ្នកប្រើប្រាស់ដែលបានបញ្ចូលដោយពួកគេ។
ក្នុងអំឡុងពេលចុះឈ្មោះ យើងប្រមូលព័ត៌មានអ្នកប្រើប្រាស់ ដែលត្រៀមខ្លួនរួចរាល់ក្នុងការចុះឈ្មោះជាមួយកម្មវិធីរបស់យើង។ ពួកវាខ្លះជាកាតព្វកិច្ច ហើយខ្លះទៀតជាជម្រើស។
ដូច្នេះ មុខងារនេះក៏អាចរួមបញ្ចូលផ្នែកសុពលភាពផងដែរ ដើម្បីធានាអំពីភាពមិនទទេ និងទម្រង់ទិន្នន័យអ្នកប្រើប្រាស់។ ការបញ្ជាក់អាចត្រូវបានធ្វើឡើងទាំងផ្នែកខាងម៉ាស៊ីនភ្ញៀវ ឬផ្នែកខាងម៉ាស៊ីនមេ។
ការមានសុពលភាពនៅផ្នែកខាងម៉ាស៊ីនមេគឺតែងតែប្រសើរជាង។ អ្នកអាចជ្រើសយកវានៅខាងអតិថិជនផងដែរសម្រាប់ភាពងាយស្រួលក្នុងការប្រើប្រាស់របស់អ្នកប្រើ។ ប៉ុន្តែការមាននៅខាងម៉ាស៊ីនបម្រើគឺមិនជាជម្រើសនិងតម្រូវការអប្បបរមា។
រចនាសម្ព័ន្ធឯកសារ ទម្រង់ HTML ដើម្បីអនុញ្ញាតឱ្យអ្នកប្រើចុះឈ្មោះក្នុងឧទាហរណ៍នេះ ទម្រង់ចុះឈ្មោះមានវាល ឈ្មោះអ្នកប្រើប្រាស់ ឈ្មោះ(ឈ្មោះបង្ហាញ) ពាក្យសម្ងាត់ និងអ៊ីមែល។ វាក៏មានវាលបញ្ជាក់ពាក្យសម្ងាត់ផងដែរ ដើម្បីអនុញ្ញាតឱ្យអ្នកប្រើបញ្ចូលពាក្យសម្ងាត់របស់គាត់ឡើងវិញសម្រាប់ការបញ្ជាក់។ ពាក្យសម្ងាត់ទាំងពីរនេះនឹងត្រូវបានប្រៀបធៀបនៅពេលក្រោយនៅពេលនៃ .
តាមរយៈការដាក់ស្នើទម្រង់នេះ អ្នកប្រើប្រាស់ត្រូវបានរំពឹងថានឹងយល់ព្រមលើលក្ខខណ្ឌ។ ដូច្នេះប្រអប់ធីកមួយត្រូវបានបន្ថែមមុនប៊ូតុងចុះឈ្មោះសម្រាប់ការធានាវា។
ទម្រង់ចុះឈ្មោះអ្នកប្រើប្រាស់ PHP ចុះឈ្មោះឈ្មោះអ្នកប្រើប្រាស់