Mencipta pendaftaran dan kebenaran pengguna php. Mewujudkan sistem pendaftaran pengguna yang mudah dalam PHP dan MySQL

Tidak lama dahulu salah seorang pengunjung saya meminta saya menulis artikel tentang bagaimana untuk mendaftar dan memberi kebenaran kepada pengguna di tapak. Sebenarnya, saya memenuhi permintaannya, dan dalam artikel ini saya akan bercakap tentang bagaimana ini dilakukan.

Terdapat beberapa cara mewujudkan pendaftaran dan kebenaran pengguna, tetapi dalam artikel ini saya akan menganalisis yang kegemaran saya - melalui sesi atau mekanisme kuki.

Pertama sekali, jika anda mahu mendaftar di laman web anda, maka anda perlu memahami tempat data pengguna akan disimpan. Boleh disimpan dalam fail teks biasa, dalam fail XML, atau dalam pangkalan data. Dua pilihan pertama sangat berbahaya, jadi saya tidak mengesyorkan anda menggunakannya. Dan inilah pilihan ketiga - menyimpan maklumat pengguna dalam pangkalan data- yang paling popular, dan kaedah menyimpan maklumat inilah yang saya nasihatkan untuk anda gunakan.

Kami telah memutuskan lokasi penyimpanan. Sekarang mari kita beralih terus ke algoritma kebenaran:

  1. Buat borang pendaftaran untuk HTML.
  2. Terima data daripada borang dalam skrip pengendali.
  3. Semak data yang diterima, dan jika ia tidak betul, kemudian ubah hala semula ke borang pendaftaran.
  4. Jika data itu betul, tuliskannya ke pangkalan data.

Itulah keseluruhan proses pendaftaran pengguna di tapak. Iaitu, pendaftaran adalah menyimpan maklumat tentang pengguna di tapak.

Perkara seterusnya ialah kebenaran pengguna di tapak, bagaimanapun, sebelum meneruskannya, saya akan memberitahu anda tentang satu perkara penting dalam borang pendaftaran - kata laluan. Saya amat mengesyorkan agar anda tidak menyimpan kata laluan dalam teks yang jelas (contohnya, " 123456 "). Pastikan anda menyulitkannya, sekurang-kurangnya menggunakan fungsi tersebut md5(). Dan simpan kata laluan yang disulitkan dalam pangkalan data.

Sekarang kebenaran. Perkara pertama yang perlu anda fahami ialah maklumat kebenaran mesti disimpan di suatu tempat. Pilihan paling mudah ialah menyimpan maklumat dalam sesi (atau dalam biskut). Dan kini algoritma:

  1. Cipta borang kebenaran pengguna pada HTML, di mana pengguna perlu memasukkan log masuk dan kata laluannya.
  2. Dalam skrip pengendali, terima data daripada pengguna. Jika anda mendengar saya dan menyimpan kata laluan yang disulitkan dalam pangkalan data, mula-mula menyulitkan kata laluan yang terhasil. Jika terdapat kata laluan yang jelas dalam pangkalan data, maka tidak perlu menyulitkannya.
  3. Semak ketepatan data yang dimasukkan, dan jika log masuk dan kata laluan sepadan dengan pengguna sedia ada dalam pangkalan data, kemudian tuliskannya dalam biskut atau maklumat sesi dengan log masuk dan kata laluan yang disulitkan (atau kata laluan terbuka jika anda tidak menyulitkannya).
  4. Jika log masuk dan/atau kata laluan dimasukkan dengan salah, kemudian ubah hala semula ke borang kebenaran.

Kini anda mempunyai maklumat yang diperlukan tentang kebenaran pengguna, yang tersimpan dalam miliknya biskut atau pada pelayan (jika sesi). Malah, kini anda perlu menyemak maklumat ini pada setiap halaman tapak dan mengesahkannya dengan cara yang sama seperti menyemak borang kebenaran. Iaitu, anda membaca daripada biskut(sesi) log masuk dan kata laluan, dan semaknya. Jika ia betul, kemudian tunjukkan satu halaman (untuk pengguna berdaftar), dan jika ia tidak betul, maka tunjukkan halaman lain (untuk tetamu).

Dan satu perkara terakhir. Bagaimana butang dibuat Keluar"? Sangat mudah. ​​Apabila anda menekan butang ini, akan biskut, atau sesi. Oleh itu, pengguna secara automatik ditendang keluar dari tapak.

Seperti yang anda lihat, semuanya adalah asas, tetapi apabila melaksanakan algoritma ini, anda pasti akan mempunyai banyak soalan. Sebagai contoh, apa yang perlu dilakukan apabila mendaftarkan pengguna yang log masuknya sudah ada dalam pangkalan data. Pelaksanaan pelbagai semakan input, pelaksanaan semakan kewujudan e-mel dan seterusnya - semua ini agak sukar jika anda melakukannya buat kali pertama. Walau bagaimanapun, saya memberikan jus itu. Jika anda mempunyai soalan semasa pelaksanaan, tanya sama ada di forum atau dalam ulasan.

Setiap orang yang membangunkan tapak web lambat laun menghadapi tugas seperti kebenaran dan pengesahan pengguna, dilaksanakan dengan tepat menggunakan bahasa pengaturcaraan, dan tidak menggunakan standard protokol http. Hari ini kita akan melihat contoh mencipta kebenaran mudah menggunakan bahasa pengaturcaraan PHP, dan kami akan menyimpan data pengguna dalam pangkalan data MySQL.

Kaedah di bawah adalah mudah atau, seolah-olah, asas untuk membuat kebenaran biasa, tetapi anda boleh menggunakannya dengan mudah, kerana ia berfungsi dengan baik, dan anda juga boleh memperbaiki kaedah ini sendiri dan melaksanakannya di tapak web anda.

Kaedah ini berdasarkan sesi, tetapi saya juga menggunakan kuki di sini, supaya penyemak imbas mengingati pengguna yang mengesahkan kali terakhir, supaya tidak memasukkan log masuk setiap kali, anda boleh, tentu saja, menyimpan kata laluan dalam kuki, tetapi ini tidak selamat, walaupun ia disulitkan. Untuk menamatkan sesi, hanya tutup penyemak imbas dan bukanya semula.

Mencipta objek dalam pangkalan data

Mari kita teruskan untuk berlatih. Mula-mula, mari buat jadual untuk menyimpan data pengguna dalam pangkalan data MySQL. Saya cadangkan menggunakan struktur jadual ringkas ( Sudah tentu, anda boleh menambahnya dengan sesuatu, pangkalan data saya dipanggil ujian, dan jadual adalah pengguna):

BUAT JADUAL ujian.pengguna(id_pengguna INT(11) TIDAK TANDATANGAN BUKAN NULL AUTO_INCREMENT, log masuk pengguna VARCHAR(30) BUKAN NULL, kata laluan_pengguna VARCHAR(32) BUKAN NULL, KUNCI UTAMA (ID_pengguna)) ENJIN = MYISAM CHARACTER SET_utf8;

Dan mari segera menambah satu entri pada jadual ini:

Masukkan ke dalam nilai test.users (user_login, user_password) ("mylogin", "202cb962ac59075b964b07152d234b70")

Secara keseluruhan kami mendapat:

  • Log masuk– mylogin;
  • Kata laluan -;

Kami, sudah tentu, akan menyimpan kata laluan dalam bentuk cincang, kerana menyimpan kata laluan dalam teks yang jelas adalah, secara sederhana, tidak selamat. Cincang kata laluan kami di atas ialah 123, jadi apabila kami memasukkan kata laluan ke dalam borang, kami akan memasukkan tepat 123, dan tidak.

Membuat borang pendaftaran

Agar pengguna mendaftar sendiri, buat borang, data dari mana akan dihantar ke fail pemprosesan pendaftaran, i.e. direkodkan dalam pangkalan data. Sebagai contoh, berikut ialah cara paling mudah:

0) ( $error = "Sudah ada pengguna dengan log masuk ini"; ) // Jika tidak, tambah pengguna baharu if(!isset($error)) ($login = mysql_real_escape_string(trim(htmlspecialchars($_POST[ "log masuk" ]))); // Alih keluar ruang dan cincang kata laluan $password = md5(trim($_POST["password"])); mysql_query("INSERT INTO users SET user_login="".$login."" , user_password=" ".$password."""); echo "Anda telah berjaya mendaftar dengan log masuk - ".$login; exit(); ) else ( // jika terdapat log masuk sedemikian, maka kita bercakap mengenainya echo $error; ) ) //secara lalai data akan dihantar ke fail cetakan yang sama<<< html

Log masuk
Kata laluan
html; ?>

Dengan cara ini, dengan kaedah ini adalah yang terbaik untuk menggunakan huruf Latin untuk log masuk ( mereka. Inggeris), jika anda ingin menulis log masuk dalam bahasa Rusia, anda perlu melaraskan sedikit kod tersebut. Anda boleh menamakan fail apa sahaja yang anda mahu ( untuk ujian saya menggunakan reg.html).

Catatan! Untuk ujian, saya hanya menggunakan satu fail, saya memanggilnya mylogin.html (kod fail di bawah). Anda boleh menggunakannya dalam fail anda dan memanggilnya apa sahaja yang anda mahu, saya menerangkan proses kebenaran itu sendiri di sini, supaya anda boleh menggunakannya di mana-mana sahaja. Dengan cara ini, dalam semua fail anda perlu menggunakan fungsi session_start(); supaya anda boleh menyemak sama ada pengguna dibenarkan atau tidak. Dan satu perkara lagi, sudah tentu, tulis tetapan anda untuk menyambung ke pangkalan data.

Membuat borang kebenaran

"."Anda telah log masuk
Itu. kami telah menyemak sesi dan boleh membuka akses kepada data tertentu"; ) jika tidak ( $login = ""; //semak kuki, mungkin dia sudah melawat ke sini jika (isset($_COOKIE["CookieMy"]))( $ log masuk = htmlspecialchars( $_COOKIE["CookieMy"]); ) //borang cetakan ringkas<<< html

Log masuk
Kata laluan
html; ) ?>

Catatan! Jika tiba-tiba penghurai php anda enggan berfungsi, i.e. Kod php itu sendiri dipaparkan pada skrin anda, maka anda tidak mempunyai pemprosesan PHP didayakan dalam fail html. Tetapan dibuat dalam fail konfigurasi pelayan web httpd.conf (jika apache):

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

Dalam IIS, dalam tetingkap Add Module Mapping, tambah *.php ke *.html, dipisahkan dengan koma. Ini adalah jika anda melakukannya di rumah pada pelayan web anda, dan jika anda melakukan semua ini di hoster, maka anda perlu menulis kepada mereka dan meminta mereka membuat perubahan yang diperlukan; beberapa hoster telah pun membuat perubahan tersebut.

Saya mengulas kod itu, jadi saya fikir semuanya harus jelas. Sekali lagi, saya mengingatkan anda bahawa dalam semua fail yang kandungannya anda tidak mahu tunjukkan kepada pengguna yang tidak dibenarkan, anda mesti menulis session_start, dan, mungkin itu sahaja. Jika anda mempunyai soalan, tanya dalam komen. Semoga berjaya!

Daripada pengarang: Lambat laun, setiap pembangun web berhadapan dengan tugas menyekat akses kepada halaman/halaman atau direktori tertentu. Ini hanya boleh menjadi halaman rahsia di tapak, bahagian pentadbiran tapak, atau mana-mana bahagian lain yang kami ingin menyekat akses dan hanya memberikan kata laluan. Untuk melakukan ini, anda boleh, sudah tentu, menggunakan alat pelayan. Saya berpendapat bahawa mana-mana pengehosan moden mempunyai fungsi untuk melindungi kata laluan direktori, di mana anda boleh membuat pengguna, memberikan kata laluan kepadanya dan, selepas melindungi kata laluan direktori, akses kepada direktori tertutup akan diberikan hanya selepas memasukkan yang betul log masuk dan kata laluan. Tetapi kadang-kadang anda ingin menulis sesuatu sendiri, sesuatu yang cepat, mudah, tetapi pada masa yang sama boleh dipercayai...

Dalam pelajaran ini kita akan cuba menulis sistem kebenaran ringkas kita sendiri. Kami akan mempunyai halaman rahsia - katakan ia akan menjadi halaman pentadbir, yang kami akan memberikan akses hanya kepada pengguna yang dibenarkan. Sistem kebenaran kami akan berdasarkan mekanisme sesi. Sebelum meneruskan pelajaran ini, saya mengesyorkan agar anda membiasakan diri dengan salah satu pelajaran saya sebelum ini, di mana kami, khususnya, mempertimbangkan kerja sesi -.

Secara ringkas, semua kerja dengan sesi boleh dibahagikan kepada 3 peringkat:

Pembukaan sesi. Pada semua halaman yang menunjukkan kerja dengan sesi, sesi mesti dimulakan menggunakan fungsi session_start().

Mendaftar pembolehubah sesi.

Menyahdaftar pembolehubah sesi menggunakan fungsi unset() dan menutup sesi menggunakan fungsi session_destroy().

Langkah 1

Jadi, untuk kerja kami, kami akan membuat 3 fail - Halaman Utama (index.php), Kenalan (contact.php) dan panel Admin (admin.php). Sila ambil perhatian bahawa sambungan fail yang akan kami hadkan aksesnya hendaklah .php. Seperti yang anda sangka, kami akan menyekat akses kepada fail admin.php. Kod untuk semua fail adalah yang paling mudah - ia adalah sejenis menu dalam satu baris dengan pautan ke halaman lain, dan di bawahnya teks individu setiap halaman supaya kita boleh membezakannya antara satu sama lain. Di sini, sebagai contoh, ialah kod untuk halaman indeks:

Laman Utama | Kenalan | Admin


Ini adalah halaman utama

Halaman selebihnya, seperti yang saya katakan, berbeza daripadanya hanya dalam teks selepas tag baris. Saya tidak membuat halaman lengkap dengan tag meta, kerana tugas kami hanya untuk menyekat akses ke halaman tertentu.

Langkah 2

Buat masa ini, kami boleh menavigasi semua halaman secara bebas, termasuk halaman pentadbir. Bagaimanakah kita boleh mengehadkan akses kepadanya? Apakah algoritma itu? Kami akan melakukan perkara berikut: pada awal halaman kami akan menyemak sama ada label yang kami perlukan berada dalam sesi atau, lebih ringkas, sama ada pembolehubah sesi tertentu wujud (kami juga boleh menyemak sama ada nilai pembolehubah sesi adalah sama dengan nilai tertentu). Jika tiada pembolehubah sedemikian, maka pengguna yang meminta halaman ini tidak dibenarkan, yang bermaksud kami akan mengubah halanya ke halaman kebenaran, di mana dia akan diminta untuk mengisi borang dengan nama dan kata laluan. Algoritma ini sangat mudah - mari laksanakannya. Pergi ke fail admin.php, buka binaan PHP di bahagian paling atas dan tulis kod berikut:

session_start();

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

header("Lokasi: enter.php");

keluar ;

Sekarang mari kita baca kod ini. Pertama, kami membuka sesi, seperti yang anda ingat - ini adalah prasyarat apabila bekerja dengan sesi. Seterusnya, kami mencipta syarat mudah yang boleh dibaca seperti ini: "jika elemen pentadbir tidak wujud dalam tatasusunan $_SESSION, kami akan melaksanakan blok tindakan yang disertakan dalam kurungan operator." Dan dalam blok kod, menggunakan fungsi header(), kami mengubah hala pengguna ke halaman enter.php (ini adalah halaman kebenaran). Selepas fungsi header(), kita mesti melengkapkan pelaksanaan skrip menggunakan fungsi exit(). Jika syarat tidak dipenuhi, iaitu, akan ada elemen pentadbir dalam tatasusunan $_SESSION, ini bermakna pengguna telah berjaya dibenarkan dan kami akan melangkau blok tindakan dalam kurungan operator, iaitu, tiada ubah hala akan berlaku, dan kami menunjukkan halaman yang diminta.

Langkah 3

Sekarang kita perlu mencipta halaman log masuk - enter.php. Untuk melakukan ini, salin kod, sebagai contoh, halaman contact.php, buat fail baharu dan tampal kod yang disalin ke dalamnya. Simpan fail di bawah nama enter.php. Sekarang di halaman ini kami akan menulis borang mudah untuk memasukkan log masuk dan kata laluan anda:

Laman Utama | Kenalan | Admin


Ini adalah halaman log masuk.
Nama pengguna:
kata laluan:

< p > < a href = "index.php" >rumah< / a > | < a href = "contact.php" >Kenalan< / a > | < a href = "admin.php" >Admin< / a > < / p >

< hr / >

< br / >

< form method = "post" >

Nama pengguna:< input type = "text" name = "user" / > < br / >

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

< input type = "submit" name = "submit" value = "Untuk masuk" / >

< / form >

Semuanya mudah di sini. Borang ini mempunyai 2 medan: medan log masuk (kami memberikannya nama "pengguna") dan medan kata laluan (bernama "lulus"). Kami juga mencipta butang (nama "serahkan"), apabila diklik, data daripada borang akan dihantar. Data dihantar menggunakan kaedah siaran - kami menetapkan ini dalam atribut kaedah teg borang - dan akan diproses pada halaman yang sama. Sekarang kita boleh cuba pergi ke halaman admin. Jika segala-galanya dilakukan tanpa ralat, kami tidak akan dapat ke sana, tetapi selalunya akan berakhir di halaman kebenaran.

Hebat!

Langkah 4

Seterusnya, kita perlu menulis pengendali pada halaman dengan borang yang akan menerima data daripada borang dan membandingkan sama ada log masuk dan kata laluan daripada borang sepadan dengan yang kita ada. Untuk melakukan ini, buka binaan PHP di bahagian atas halaman log masuk dan mula menulis kod. Pertama, kita mesti membuka sesi - selepas semua, di sinilah kita akan membuat label dalam sesi jika kita telah menerima log masuk dan kata laluan yang betul. Pada halaman yang sama ini kami akan menyimpan log masuk dan kata laluan pentadbir. Biasanya data ini disimpan dalam pangkalan data (DB), tetapi kami hanya akan mempunyai 1 pengguna (pentadbir), dan oleh itu menyimpan datanya untuk log masuk ke DB adalah tidak rasional sepenuhnya. Sekiranya terdapat lebih daripada satu pengguna, iaitu, sebagai contoh, kami menulis projek di mana terdapat pendaftaran, maka, tentu saja, dalam kes ini, sukar untuk dilakukan tanpa pangkalan data.

Jadi, log masuk kami akan menjadi "admin" dan kami akan menyimpannya dalam pembolehubah $admin. Kata laluan akan menjadi "mypass" dan ia akan disimpan dalam pembolehubah $pass. Tetapi menyimpan kata laluan dalam teks yang jelas tidak diterima - ini bertentangan dengan prinsip keselamatan. Kami akan menyimpan kata laluan dalam bentuk yang disulitkan, dan fungsi md5() akan membantu kami menyulitkannya. Fungsi ini menyulitkan rentetan menggunakan algoritma khas, dan output ialah rentetan 32 aksara (dipanggil cincang). Jika kami menyulitkan rentetan "mypass" (ini boleh dilakukan, contohnya, dalam fail contact.php):

echo md5 ("mypass" );

maka output akan menjadi baris "a029d0df84eb5549c641e04a9ef389e5″ - ini akan menjadi kata laluan kami yang disulitkan. Buat masa ini, kod halaman log masuk adalah seperti ini:

Laman Utama | Kenalan | Admin


Ini adalah halaman log masuk.
Nama pengguna:
kata laluan:

session_start();

$admin = "admin" ;

$lulus = "a029d0df84eb5549c641e04a9ef389e5";

< p > < a href = "index.php" >rumah< / a > | < a href = "contact.php" >Kenalan< / a > | < a href = "admin.php" >Admin< / a > < / p >

< hr / >

< br / >

< form method = "post" >

Nama pengguna:< input type = "text" name = "user" / > < br / >

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

< input type = "submit" name = "submit" value = "Untuk masuk" / >

< / form >

Langkah 5

Sekarang mari kita semak perkara yang kami terima daripada borang dengan apa yang kami ada dalam pembolehubah log masuk dan kata laluan. Kami akan melakukan ini secara bersyarat - hanya jika butang borang ditekan. Bagaimanakah kita boleh menyemak ini? Butang mempunyai nama ("serahkan"), dan kami menghantar data menggunakan kaedah siaran. Sehubungan itu, kita hanya boleh menyemak sama ada elemen hantar wujud dalam tatasusunan $_POST. Jika ada, butang telah ditekan, dan kami akan melakukan tindakan untuk mengesahkan data yang dihantar, jika tidak, kami tidak akan melakukan apa-apa. Selepas mengisytiharkan log masuk dan kata laluan, kami menulis syarat:

if($_POST["serahkan"])( if($admin == $_POST["pengguna"] DAN $lulus == md5($_POST["lulus"]))( $_SESSION["admin"] = $ admin; header("Lokasi: admin.php"); exit; )else echo "

Log masuk atau kata laluan tidak betul!

"; }

jika ($_POST["serahkan"]) (

jika ($ admin == $_POST [ "pengguna" ] DAN $ lulus == md5 ($ _POST [ "lulus" ] ) ) (

$_SESSION["admin"] = $admin;

keluar ;

) yang lain bergema "

Log masuk atau kata laluan tidak betul!

" ;

Kami membuat syarat untuk menyemak log masuk dan kata laluan dua kali ganda. Ini dilakukan menggunakan operator logik DAN (ia juga boleh ditulis dengan cara ini - "&&"). Keadaan tersebut boleh dibaca seperti berikut: “jika (pembolehubah $admin sama dengan elemen pengguna dalam tatasusunan $_POST DAN pembolehubah $pass adalah sama dengan cincang elemen pas dalam tatasusunan $_POST) maka (kami melakukan blok tindakan) jika tidak, kami memaparkan teks 'Log masuk atau kata laluan tidak betul!'

Jika pasangan kata laluan log masuk sepadan, maka kami mendaftar pembolehubah sesi $_SESSION["admin"] dan mengubah hala pengguna ke halaman pentadbir - admin.php.
Sekarang mari kita cuba menguji apa yang telah kita buat. Jika kami memasukkan log masuk dan kata laluan palsu dengan sengaja, kami akan menerima mesej amaran bahawa "Log masuk atau kata laluan tidak betul!" Sekarang mari cuba masukkan maklumat log masuk yang betul. Jika kami tidak membuat kesilapan di mana-mana, maka selepas mengklik butang "Log Masuk" kami akan mendapati diri kami berada di halaman pentadbir.

Langkah 6

Sekarang semua yang perlu dilakukan ialah menambah beberapa butiran kecil. Sebagai contoh, kami kini diberi kuasa dalam sistem, tetapi jika kami memasukkan alamat halaman kebenaran dalam bar alamat, kami akan dengan mudah mendapatkannya dan melihat borang kebenaran. Ini tidak sepatutnya berlaku - hanya pengguna yang tidak dibenarkan akan melihat borang tersebut. Bagaimana kita boleh membetulkannya? Ingat bahawa pada halaman admin.php kami menyemak sama ada label itu berada dalam sesi. Jika tiada, kami mengubah hala pengguna ke halaman kebenaran. Di sini kita boleh melakukan perkara yang sama, hanya secara terbalik. Iaitu, kami juga menyemak sama ada label berada dalam sesi. Cuma sekarang kami akan memindahkan pengguna ke halaman pentadbir jika terdapat label sedemikian. Ini, pada dasarnya, logik. Jika ada label, maka pengguna sudah diberi kuasa, dan kami boleh memindahkannya ke halaman pentadbir. Pada halaman enter.php selepas sesi bermula, tambahkan kod berikut:

if($_SESSION["admin"])(header("Lokasi: admin.php"); keluar; )

jika ($_SESSION["admin"]) (

pengepala ("Lokasi: admin.php" );

keluar ;

Sekarang, jika pengguna yang diberi kuasa cuba memasukkan nama halaman kebenaran dalam bar alamat, dia akan diubah hala ke halaman pentadbir. Pengguna yang tidak dibenarkan akan dapat mengakses halaman kebenaran secara bebas.

Langkah 7

Perkara seterusnya yang perlu kami sediakan ialah pelaksanaan log keluar pengguna yang dibenarkan, iaitu, katakan pentadbir telah menyelesaikan kerjanya dan perlu log keluar supaya tiada orang lain boleh bekerja di bawah akaunnya. Untuk melakukan ini, tambahkan pautan "Keluar" ke halaman admin.php. Pautan akan membawa ke halaman yang sama, hanya parameter yang kami perlukan akan ditambahkan padanya. Parameter ditambah menggunakan tanda soal:

Keluar

< a href = "admin.php?do=logout" >Keluar< / a >

Pautan ini boleh diletakkan di tempat yang kita perlukan - saya akan meletakkannya selepas teks halaman. Mengenai parameter, ia akan dihantar menggunakan kaedah GET (ingat bahawa kami menghantar data dari borang menggunakan parameter kedua - POST). Apabila menggunakan kaedah ini, data dilampirkan pada alamat dalam bar alamat dan dipisahkan daripada alamat dengan hanya tanda soal. Kami lulus satu parameter - lakukan - dan pada masa yang sama memberikannya nilai "log keluar". Bagaimanakah kita boleh memberi kebenaran kepada pengguna sekarang? Ia sangat mudah - peringkat kedua dan ketiga akan membantu kami di sini apabila bekerja dengan sesi. Apabila halaman dimuatkan, kita boleh menyemak nilai elemen do daripada tatasusunan $_GET. Jika ia sama dengan rentetan "log keluar", kami hanya akan menyahdaftar pembolehubah sesi $_SESSION["admin"] dan memusnahkan sesi. Sehubungan itu, tidak akan ada label dalam sesi selepas ini, dan dalam blok seterusnya, di mana kami menyemak kehadiran label, pengguna akan dialihkan ke halaman kebenaran. Mudah sahaja.

Hai semua. Jadi kami telah mempelajari beberapa elemen untuk mencipta bentuk. Sudah tiba masanya untuk menggabungkan pengetahuan kita untuk menyelesaikan masalah yang lebih besar. Mari buat borang yang paling mudah untuk kebenaran di tapak. Untuk melakukan ini, kami memerlukan dua medan, kami mencipta dan melampirkan tandatangan padanya.

Medan pertama adalah untuk log masuk, yang kedua adalah untuk kata laluan. Dan dengan yang kedua ia tidak begitu mudah. Kerana pada masa ini ia hanyalah medan input teks.

Keputusan dalam pelayar:

Agar teks yang dimasukkan ke dalamnya digantikan dengan asterisk, seperti biasa untuk medan jenis ini, anda perlu melakukan satu tindakan mudah. Iaitu, untuk menggantikan nilai atribut menaip pada kata laluan:

Keputusan:

Butang hantar borang

Di sini anda pergi. Borang kami hampir siap. Sekarang, untuk melengkapkan penciptaannya, anda perlu mencipta butang yang akan digunakan untuk menyerahkan borang. Masalah diselesaikan menggunakan tag dengan jenis serahkan.

Jika butang harus mempunyai beberapa jenis tulisan, maka ia boleh dilakukan menggunakan atribut nilai. Terpulang kepada anda untuk memberikan nama pada butang atau tidak; jika anda melakukan ini, pelayan akan menerima nama ini, serta nilai butang.

Sebagai peraturan, nama butang hantar borang diperlukan apabila borang itu mempunyai beberapa butang, setiap satunya melakukan tindakan tertentu. Terima kasih kepada ini, pelayan, yang menerima nama dan nilai butang dari penyemak imbas, memahami butang mana yang diklik pengguna dan apa yang, sewajarnya, perlu dilakukan.

Akibatnya, kod untuk borang kami adalah seperti berikut:

Keputusan dalam pelayar:

Jadi, ada tugas - untuk membuat pendaftaran dalam sistem dan kemungkinan kebenaran. Bagaimana hendak melakukannya? Mari kita mulakan mengikut urutan.

Pendaftaran di php

Semuanya mudah di sini. Gudang data sedang dibuat untuk pengguna. Biasanya ini adalah jadual pangkalan data. Ia termasuk medan seperti id, nama pengguna dan kata laluan. Medan yang selebihnya adalah pilihan. Anda boleh mengumpul e-mel pengguna, alamat mereka, IP yang mungkin, masa akses kepada rangkaian, perkataan kod daripada kad bank, soalan keselamatan...

Secara umum, perkara utama ialah pasangan log masuk-kata laluan.

Perkara penting pertama— Kata laluan pengguna tidak boleh disimpan dalam teks yang jelas. Iaitu, seperti teks. Tidak mustahil kerana jika orang lain mendapat akses kepada pangkalan data, mereka akan menerima pangkalan data kata laluan log masuk pengguna, yang tidak mungkin mereka sukai. Dan jika anda menganggap bahawa ramai pengguna mempunyai log masuk dan kata laluan yang sama pada perkhidmatan yang berbeza, ini meletakkan data peribadi dan kewangan, surat-menyurat peribadi dan segala-galanya dalam risiko.

Kata laluan mesti disimpan sebagai cincang. Hashing ialah operasi yang menukar data asal kepada beberapa jenis cast dengan panjang yang diketahui. Ini bagus kerana pelakonnya unik. Iaitu, jika kita menukar sekurang-kurangnya satu aksara dalam data sumber, output operasi pencincangan akan berubah sama sekali berbeza, di luar pengiktirafan. Operasi pencincangan tidak boleh diterbalikkan, iaitu, ia tidak akan dapat mengembangkan data asal daripada petikan ini. Ini adalah bagaimana ia berbeza daripada penyulitan.

MySQL dan PHP mempunyai fungsi pencincangan biasa dan selamat yang sama - md5. Algoritma ini mengambil data dan memberikan cap jari.

Jadi, kami menerima data daripada pengguna, semak sama ada ia kosong, jika ia tidak mengandungi sebarang aksara yang tidak kami perlukan (jangan hadkan pengguna terlalu banyak). Dan sekarang kami membuat permintaan seperti ini:

INSERT IN TO `users` (`id`,`username`,`password`) NILAI("",$quoted_username,MD5($quoted_password));

Sila ambil perhatian bahawa saya secara khusus menamakan pembolehubah $quoted_ kerana sebelum memasukkannya ke dalam pertanyaan, ia mesti dilepaskan menggunakan fungsi mysql_real_escape_string() . Oleh kerana fungsi ini sangat kerap digunakan, dan ditulis dengan sangat panjang (Saya suka arkitek PHP), saya cadangkan memasukkannya ke dalam shell anda. Sebagai contoh, seperti ini:

Petikan fungsi($var) ( kembalikan mysql_real_escape_string($var); )

Keizinan dalam php

Kami telah menambah pengguna baharu dan kini dia diberi kuasa. Kami menariknya borang kata laluan log masuk dan menangkap datanya. Apa yang akan datang? Lagipun, kami menerima kata laluan dalam teks yang jelas, dan dalam pangkalan data terdapat hash kata laluan. Adakah saya perlu menukar kata laluan kepada cincang dan kemudian membandingkannya? Tidak, anda boleh melakukannya dengan lebih mudah - dalam satu permintaan.

PILIH * DARI `pengguna` DI MANA `log masuk`=$qoted_login DAN `kata laluan`=MD5($quoted_password);

Jika pertanyaan mengembalikan rentetan, ia akan menjadi rentetan dengan data pengguna. Jika tidak, tiada pengguna sedemikian dalam jadual. Data pengguna akan sangat berguna kepada kami - ia berbaloi untuk memasukkannya ke dalam tatasusunan bersekutu.

Ingat pengguna

Sekarang kita perlu ingat bahawa pengguna diberi kuasa dan mengetahui dengan tepat siapa itu. Perkara pertama yang terlintas di fikiran ialah menggunakan kuki untuk ini. Malah, masukkan log masuk dan id pengguna ke dalam kuki dan sentiasa tahu siapa yang meminta halaman itu pada masa ini.

Tetapi ini adalah amalan yang tidak baik. kenapa? Kerana kuki ialah fail yang disimpan dalam penyemak imbas pengguna dan data daripada fail ini dihantar ke pelayan dalam setiap permintaan. Pertama, ia dihantar sebagai teks, yang bermaksud ia mudah dipintas. Kedua, ini adalah teks ringkas yang dihantar oleh pengguna. Oleh itu, ia boleh ditulis semula secara literal. Sebagai contoh, jika kami memutuskan untuk menyimpan nama pengguna "Vasya" dalam kuki, dia boleh membuka pengurusan kuki dalam penyemak imbasnya, mencari kuki yang dikehendaki dan menukarnya kepada, sebut, "Pentadbir". Itu sahaja. Kini, dengan setiap permintaan, kami akan menerima kuki, yang akan memberitahu kami nama pengguna pengguna - "Pentadbir".

Oleh itu, adalah lebih selamat untuk menyimpan semua data pada pelayan di tempat yang tidak boleh diakses dari web. Dalam beberapa folder yang tidak boleh diakses dari penyemak imbas. Semua data tentang pengguna harus ditulis ke folder ini dan dibaca dari sana setiap kali dia meminta dokumen. Untuk mengetahui pengguna mana yang memiliki fail data, anda perlu memanggil fail tersebut dengan nama unik dan membuang nama ini ke dalam kuki pengguna. Oleh itu, pengguna tidak akan dapat mengetahui nama fail untuk pengguna Admin - fail ini dijana oleh sistem pada pelayan. Dan ini membolehkan anda menyeret kata laluan dalam teks yang jelas dari dokumen ke dokumen.

Apa yang saya gambarkan ialah mekanisme sesi. Dalam Perl, sebagai contoh, untuk menggunakan sesi anda perlu memuatkan modul. Dan dalam sesi PHP disokong di luar kotak. Sebenarnya, semua yang anda perlu tahu ialah fungsi session_start() dan tatasusunan $_SESSION. Itu sahaja. Saya akan memberitahu anda sekarang.

Dalam setiap skrip di mana anda akan menulis atau membaca daripada sesi, anda perlukan sebelum anda mengeluarkan sebarang maklumat panggil fungsi session_start(). Ini akan memulakan sesi. Fungsi ini akan mencipta fail sesi jika ia tidak wujud atau membacanya jika kuki khas dihantar ke skrip.

Untuk menulis data ke sesi, anda hanya perlu menulisnya ke tatasusunan $_SESSION. Sekarang kita perlu ingat id pengguna.

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

Semua. Kini, setiap kali pengguna meminta skrip yang menggunakan sesi, nilai elemen $_SESSION["userid"] akan tersedia untuk anda.

Oleh itu, apabila pengguna memasukkan log masuk dan kata laluannya, kami menerima datanya daripada pangkalan data, yang mengesahkan bahawa pengguna sedemikian berada dalam pangkalan data kami, kami mengingatinya dalam sesi itu.

Ketahui sama ada pengguna diberi kuasa

Nah, ia semudah memerah pear! Sekarang setelah anda mengetahui cara sesi berfungsi, mengetahui sama ada pengguna dibenarkan adalah masalah satu baris. Inilah dia:

If(isset($_SESSION["userid"])) ( print "user is authorized"; )

Jika id pengguna ditakrifkan dalam sesi, maka dia telah pun lulus kebenaran. Tetapi bagaimana anda boleh mengetahui pengguna yang mana ia? Apakah log masuknya? Tarikh lahir? Perkataan kod untuk kad bank? Nama Anak Perempuan Ibu?

Jelas sekali - buat satu pertanyaan kepada jadual pengguna. Kami juga mempunyai id pengguna ini.

PILIH * DARI `pengguna` DI MANA `id`=$quoted_userid

Bagaimana untuk log keluar pengguna dan log keluar

Nah, ia agak mudah. Jika kami menentukan sama ada pengguna dibenarkan oleh kehadiran id pengguna dalam sesi, maka untuk log keluar dia, kami perlu mengalih keluarnya dari situ. Ia dilakukan seperti ini:

Unset($_SESSION["userid"]);

Anda juga boleh mematikan sesi hanya untuk memastikan. Ini akan mengosongkan kuki pengguna dan memusnahkan fail sesi pada pelayan. Dalam kes ini, semua data akan hilang daripadanya. Ia dilakukan seperti ini:

Session_destroy();

Itu sahaja. Jika anda mempunyai sebarang pertanyaan, jangan teragak-agak untuk menghubungi kami. Selain itu, anda boleh menghubungi saya melalui icq atau mel dan meminta bantuan dengan sesuatu. Saya biasanya tidak menolak. Jika anda memerlukan bantuan yang serius, saya boleh meminta sedikit bayaran. Selain itu, saya boleh mengajar anda cara membuat laman web dari jauh! Inilah jenis jurulatih dan guru saya :) Dan jika anda ingin menerima pengajaran dan helah seperti itu, secara percuma, langgan RSS blog saya.

Siaran ini ditaja oleh ibooknet.ru, yang menawarkan pembaikan komputer riba pada harga yang berpatutan. Secara peribadi, komputer riba saya baik dan saya harap saya tidak perlu membetulkannya. Saya doakan yang sama untuk awak.