បង្កើតប្រព័ន្ធចុះឈ្មោះអ្នកប្រើប្រាស់សាមញ្ញក្នុង PHP និង MySQL ។ ការបង្កើតប្រព័ន្ធចុះឈ្មោះសាមញ្ញមិនគួរឱ្យជឿនៅក្នុង PHP និង MySQL ទំព័រចុះឈ្មោះក្នុង PHP

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 ។
  • ធ្វើឱ្យមានសុពលភាពព័ត៌មានដែលបានបញ្ជូនរបស់អ្នកប្រើប្រាស់នៅលើការបញ្ជូនទម្រង់។
  • ការគ្រប់គ្រងមូលដ្ឋានទិន្នន័យ ដើម្បីរក្សាទុកអ្នកប្រើប្រាស់ដែលបានចុះឈ្មោះទៅក្នុងមូលដ្ឋានទិន្នន័យបន្ទាប់ពីសុពលភាព។
  • ជំហានទីបីនឹងត្រូវបានប្រតិបត្តិបន្ទាប់ពីធានាថាអ្នកប្រើប្រាស់មិនត្រូវបានបន្ថែមរួចហើយ។ ការផ្ទៀងផ្ទាត់ភាពឯកតាទិន្នន័យនេះនឹងត្រូវបានអនុវត្តដោយផ្អែកលើអ៊ីមែល និងឈ្មោះអ្នកប្រើប្រាស់ដែលបានបញ្ចូលដោយពួកគេ។

    ក្នុងអំឡុងពេលចុះឈ្មោះ យើងប្រមូលព័ត៌មានអ្នកប្រើប្រាស់ ដែលត្រៀមខ្លួនរួចរាល់ក្នុងការចុះឈ្មោះជាមួយកម្មវិធីរបស់យើង។ ពួកវាខ្លះជាកាតព្វកិច្ច ហើយខ្លះទៀតជាជម្រើស។

    ដូច្នេះ មុខងារនេះក៏អាចរួមបញ្ចូលផ្នែកសុពលភាពផងដែរ ដើម្បីធានាអំពីភាពមិនទទេ និងទម្រង់ទិន្នន័យអ្នកប្រើប្រាស់។ ការបញ្ជាក់អាចត្រូវបានធ្វើឡើងទាំងផ្នែកខាងម៉ាស៊ីនភ្ញៀវ ឬផ្នែកខាងម៉ាស៊ីនមេ។

    ការមានសុពលភាពនៅផ្នែកខាងម៉ាស៊ីនមេគឺតែងតែប្រសើរជាង។ អ្នក​អាច​ជ្រើស​យក​វា​នៅ​ខាង​អតិថិជន​ផង​ដែរ​សម្រាប់​ភាព​ងាយ​ស្រួល​ក្នុង​ការ​ប្រើ​ប្រាស់​របស់​អ្នក​ប្រើ។ ប៉ុន្តែ​ការ​មាន​នៅ​ខាង​ម៉ាស៊ីន​បម្រើ​គឺ​មិន​ជា​ជម្រើស​និង​តម្រូវ​ការ​អប្បបរមា។

    រចនាសម្ព័ន្ធឯកសារ

    ទម្រង់ HTML ដើម្បីអនុញ្ញាតឱ្យអ្នកប្រើចុះឈ្មោះ

    ក្នុងឧទាហរណ៍នេះ ទម្រង់ចុះឈ្មោះមានវាល ឈ្មោះអ្នកប្រើប្រាស់ ឈ្មោះ(ឈ្មោះបង្ហាញ) ពាក្យសម្ងាត់ និងអ៊ីមែល។ វាក៏មានវាលបញ្ជាក់ពាក្យសម្ងាត់ផងដែរ ដើម្បីអនុញ្ញាតឱ្យអ្នកប្រើបញ្ចូលពាក្យសម្ងាត់របស់គាត់ឡើងវិញសម្រាប់ការបញ្ជាក់។ ពាក្យសម្ងាត់ទាំងពីរនេះនឹងត្រូវបានប្រៀបធៀបនៅពេលក្រោយនៅពេលនៃ .

    តាមរយៈការដាក់ស្នើទម្រង់នេះ អ្នកប្រើប្រាស់ត្រូវបានរំពឹងថានឹងយល់ព្រមលើលក្ខខណ្ឌ។ ដូច្នេះប្រអប់ធីកមួយត្រូវបានបន្ថែមមុនប៊ូតុងចុះឈ្មោះសម្រាប់ការធានាវា។

    ទម្រង់ចុះឈ្មោះអ្នកប្រើប្រាស់ PHP ចុះឈ្មោះឈ្មោះអ្នកប្រើប្រាស់