internet pencereler Android
Genişletmek

PHP'ye kayıt yazın. PHP ve MySQL için basit bir kullanıcı kayıt sistemi oluşturma

Saha ziyaretçilerini sitedeki bazı gruplara bölmek için küçük bir sistem kurduğunuzdan emin olun. pHP ile kayıt.. Böylece, geleneksel olarak ziyaretçileri sadece rastgele ziyaretçi grubuna ayrılırsınız ve daha değerli bilgi veren daha ayrıcalıklı bir kullanıcı grubuna ayrılırsınız.

Çoğu durumda, PHP'de bir dosyada yazılan daha basitleştirilmiş bir kayıt sistemi kullanın. kayıt.php..

Öyleyse, biraz dikkatini dağıttık ve şimdi kayıt dosyasını daha ayrıntılı olarak düşünün.

Dosya kaydı.php.

Sizin için zamanın kütlesini almadığınız için, kullanıcıları toplayacak bir sistem oluşturun, onlardan minimum iletişim bilgilerini alarak. Bu durumda, herkes MySQL veritabanına gönderilecektir. En yüksek taban hızı için, MyISAM formatında ve UTF-8 kodlamasında bir kullanıcı tablosu oluşturacağız.

Not! Tüm komut dosyalarını bir kodlamada yazmanız gerekir. Tüm site dosyaları ve MySQL veritabanı tek bir kodlamada olmalıdır. En yaygın UTF-8 ve Windows-1251 kodlamaları.

Bir kodlamada her şeyi yazmak için gerekenler için bir şekilde konuşacağız. Bu arada, bu bilgiyi, fransif kurallar oluşturan, aksi takdirde, komut dosyalarının çalışmasıyla ilgili sorunlar olacaktır. Tabii ki korkunç bir şey yok, ancak komut dosyasında hataları bulmak için zamanın kilounu kaybetmek.

Komut dosyasının kendisi nasıl çalışır?

Her şeyi basitleştirmek ve hızlı bir sonuç almak istiyoruz. Bu nedenle, yalnızca Oturum açma, e-posta ve şifresini kullanıcılardan alacağız. Ve spam robotlarına karşı korumak için küçük bir captcha kurun. Aksi takdirde, Londra'dan herhangi bir çocuk, tüm üssü kireç kullanıcıları ile birkaç dakika içinde dolduracak küçük bir robot ayrıştırıcı yazacak ve dahisinde ve cezasızlığında sevinir.

İşte komut dosyası kendisi. Her şey bir dosyada yazılır. kayıt.php.:

! `; // kırmızı soru işareti $ sha \u003d $ sh. "Scripts / Pro /"; // ana klasöre giden yolu $ BG \u003d `bgcolor \u003d" # e1ffeb "`; // arka plan renk çizgileri?\u003e Kayıt komut dosyası örneği Registry.php style.cssssssssssssssss

Bu durumda, komut dosyası kendime hitap ediyor. Ve kaydedilen verilerin bir formu ve işleyicisidir. Dosyanın zip arşivi tarafından sıkıştırıldığına dikkatinizi çekiyorum ve Config.php, kullanıcı veritabanı dökümü dosyasını, yardımcı fonksiyonlar fonksiyonlarını içeren dosyayı, stil dosyası stili.css ve register.php dosyasını içeren dosyayı içeren konfigürasyon dosyasını içerir. kendisi. Ayrıca, çalışmalardan ve kapatma karakterlerinden sorumlu olan birkaç dosya.

REG.RU: Etki Alanları ve Hosting

Rusya'daki en büyük kaydedici ve barındırma sağlayıcısı.

Bakım için 2 milyondan fazla alan adı.

Promosyon, bir etki alanı, iş çözümleri için posta.

Dünya çapında 700 bin'den fazla müşteri seçimi yaptılar.

* Kaydırmayı askıya almak için fare.

İleri geri

PHP ve MySQL için basit bir kullanıcı kayıt sistemi oluşturma

Bir kayıt sistemi oluşturmak büyük bir iştir. E-posta adreslerini yürüten bir kod yazmanız gerekir, posta onayı için bir mesaj gönderir ve ayrıca kalan form alanlarının doğrulanmasını ve daha fazlasını gerçekleştirir.

Bütün bunları yazdıktan sonra bile, kullanıcılar isteksizce kayıt yaptıracak, çünkü Bu, kendi taraflarında bazı çabalar gerektirir.

Bu derste, genel olarak şifreleri saklamayan ve saklamayan çok basit bir kayıt sistemi yaratacağız! Sonuç, mevcut bir PHP sitesine değiştirmek ve eklemek kolay olacaktır. Nasıl çalıştığını bulmak ister misin? Alttarafı oku.



Süper basit sistemimizin nasıl çalışacağını işte:

Yetkilendirme ve kayıt biçimini birleştiriyoruz. Bu formda bir e-posta adresi ve bir kayıt düğmesini girmek için bir alan olacaktır;
- E-posta adresi alanını doldururken, Kayıt düğmesine tıklayarak yeni bir kullanıcı oluşturulur, ancak yalnızca girilen e-posta adresi veritabanında bulunmazsa oluşturulur.

Bundan sonra, kullanıcı tarafından belirtilen kullanıcının 10 dakika içinde alakalı olacak şekilde belirtilen kullanıcıya gönderilen belirli bir rastgele benzersiz karakter (belirteç) oluşturulur;
- Bağlantıya göre, kullanıcı sitemize gider. Sistem bir belirteç varlığını belirler ve kullanıcıyı yetkilendirir;

Bu yaklaşımın avantajları:

Şifreleri saklamanız ve alan doğrulamasını yapmanız gerekmez;
- Şifreyi, gizli soruları vb. Geri yüklemeye gerek yok;
- Kullanıcının kayıtlı / yetkilendirdiği andan itibaren, bu kullanıcının erişim alanınızda olacağından (e-posta adresi doğru) olduğundan her zaman emin olabilirsiniz;
- İnanılmaz derecede basit kayıt işlemi;

Dezavantajları:

Kullanıcı Hesabı Güvenliği. Birinin postaya erişimi varsa, giriş yapabilir.
- E-posta korunmaz ve ele geçirilebilir. Bu sorunun ilgili olup olmadığını ve şifrenin unutulduğunda ve geri yüklendiğinde veya veri aktarımı için HTTPS kullanmayan herhangi bir yetkilendirme sisteminde (giriş / şifre) kullanmasının durumunda aklınızda bulundurun;
- Bir posta sunucusuna nasıl ihtiyacınız olduğunu yapılandırırken, yetkilendirme bağlantılarına sahip mesajların spam içinde olacağı bir şans var;

Sistemimizin avantaj ve dezavantajlarının karşılaştırılması, sistemin yüksek yasaklığı (son kullanıcı için en uygun) olduğu ve aynı zamanda düşük bir güvenlik göstergesine sahip olduğu söylenebilir.

Bu nedenle, önemli bilgilerle çalışmayan forumlar ve hizmetler için kayıtlar için sunulur.

Bu Sistem Nasıl Kullanılır

Sitenizdeki kullanıcıları yetkilendirmek için sistemi kullanmanız gerektiğinde ve bu dersi kemikler üzerinde sökmek istemeniz durumunda, yapmanız gereken şey budur:

Dersine ekli kaynakları indirmeniz gerekir.
- Arşivdeki dosyayı bulun tables.sql. PHPMYADMIN'deki İçe Aktar seçeneğini kullanarak veritabanınıza alın. Alternatif bir yol: Bu dosyayı bir metin düzenleyiciden açın, SQL sorgusunu kopyalayın ve çalıştırın;
- açık / Main.php içerir. ve iletişim ayarlarını veritabanınızla doldurun (tabanla ve tabanın ana bilgisayarı ve adıyla iletişim kurmak için bir kullanıcı ve şifre belirleyin). Aynı dosyada, sistem tarafından gönderilen mesajlar için orijinal adres olarak kullanılacak e-posta belirtmeniz gerekir. Bazı ana bilgisayarlar, ana bilgisayar kontrol panelinden oluşturulan bu e-posta adresini belirtmezken giden postaları engellerken, bu nedenle gerçek adresi belirtin;
- Tüm dosyaları yükleyin index.php., korumalı.php. Ve varlıklar ve ev sahibinizde FTP üzerinden klasörler içerir;
- Yetkilendirme formunu görüntülemek için gereken her PHP sayfasına kodu ekleyin;

Request_once "içerir / main.php"; $ User \u003d yeni kullanıcı (); if (! $ user- & gtloggedin ()) (yönlendirme ("index.php");)
- Hazır!

İlgilenenler için, hepsi nasıl çalışır - aşağıda okumak için ileri!

İlk adım, yetkilendirme formunun HTM kodunu yazmaktır. Bu kod dosyada bulunur. index.php.. Bu dosya ayrıca, form verilerini ve yetkilendirme sisteminin diğer faydalı işlevlerini içeren bir PHP kodu içerir. PHP kod incelemesine adanmış aşağıdaki bölümde daha fazla bilgi edinebilirsiniz.

index.php.

Eğitim: PHP ve MySQL ile Süper Basit Kayıt Sistemi

Giriş yap veya kaydol.

E-posta adresinizi yukarıda girin ve göndereceğiz
bir giriş bağlantısı.

Baş bölümünde (Etiketler arasında) ve) Ana stilleri bağladım (bu derste anlamıyorlar, böylece onları kendiniz görebilirsiniz. Varlıklar / CSS / Style.css klasörü). Kapanış etiketine JQuery Kütüphanesini ve yazacağımız ve hemen aşağıda merak edeceğimiz Script.js dosyasını bağladım.


Javascript.

jQuery, işlevi kullanan "Kayıt / Yetkili" düğmesinin durumunu izler e.preventDefault () Ve Ajax isteklerini gönderir. Sunucu yanıtına bağlı olarak, bunu veya bu mesajı görüntüler ve daha fazla eylemi belirler /

varlıklar / JS / Script.js

$ (İşlev () (function () (var formu \u003d $ ("# login-register"); form.on ("Gönder", işlev (e) (eğer (form.is ("yükleme, .loggedin")) ;) var e-posta \u003d form.find ("giriş"). Val (), MessageHolder \u003d Form.Find ("span"); e.preventDefault (); $ .post (this.Action, e-posta: e-posta), İşlev ( M) (form.addclass ("hata"); messageholder.text (m.Message);) başka (form.removeclass ("hatası"). AddClass ("loggedin"); Mesaj Sahibi. Metin (m.Message);) )));))) $ (Belge) .ajaxstart (işlev ();)); $ (belge) .ajaxcomplet (fonksiyon () (form. RemoveClass ("yükleme");)));););););););););););););

AJAX isteğinin geçerli durumunu görüntülemek için forma eklendi (bu yöntemler nedeniyle mümkün oldu. ajaxstart ()) BEN. ajaxcomplete ()Dosyanın sonuna daha yakın bulabilirsiniz).

Bu sınıf bir dönen animasyonlu GIF dosyasını gösterir (isteğin işlendiğini işaretler gibi) ve ayrıca yeniden gönderme biçimini önleyen bir bayrak olarak işlev görür (kayıt düğmesi bir kez basıldığında). Sınıf .giriş. - Bu başka bir bayrak, e-posta gönderildiğinde ayarlanır. Bu bayrak anında herhangi bir işlemi formla engeller.

Veritabanı şeması

İnanılmaz derecede basit kayıt sistemimiz 2 MySQL tablosu kullanır (SQL kodu dosyada tables.sql.). İlk önce kullanıcı hesaplarındaki verileri depolar. İkinci, giriş girişimlerinin sayısı hakkındaki bilgileri depolar.


Kullanıcı tablosu devresi.

Sistem, diyagramda görünen şifreleri kullanmaz. Sütunu görebilirsiniz jeton. sütuna bitişik belirteçlerle token_Validity. Kullanıcı sisteme bağlandığında belirteç kurulur, bir mesaj göndermek için e-postasını ayarlar (bir sonraki blokta bu konuda biraz daha fazla). Sütun token_Validity Saati 10 dakika sonra ayarlar, sonra belirteç alakalı olmaktan vazgeçer.


Yetkilendirme girişimlerinin sayısını dikkate alan masa devresi.

Her iki tabloda da IP adresi, tamsayı alanındaki IP2Long işlevini kullanarak işlenmiş biçimde saklanır.

Şimdi biraz php kodu yazabiliriz. Sistemin temel işlevselliği, sınıfa emanet edilir. User.class.php.aşağıda görebileceğiniz.

Bu sınıf aktif olarak İdorm (DOCS) kullanır, bu kitaplıklar veritabanlarıyla çalışmak için minimal olarak gerekli araçlardır. Veritabanına erişim, jenerasyon oluşturma ve doğrulamaları sağlar. PHP kullanıyorsa, kayıt sistemini sitenize kolayca bağlamanıza izin veren basit bir arayüzdür.

User.class.php.

Sınıf kullanıcı (// özel orm vaka özel $ orm; / ** * ** * Tocken'de bir kullanıcı bulun. Sadece geçerli belirteçler dikkate alınır. TOCKEN, MOTUE * @param string $ belirteçten 10 dakika boyunca üretilir. Bu İstenilen Tecken * @return kullanıcısı. Kullanıcı işlevinin değerini iade edin * / Halk Statik Fonksiyon FindByToken ($ TOKEN) (// Veritabanında bir belirteç bulun ve geçerli zaman damgası $ Sonuç \u003d Orm :: for_table (" Reg_users ") -\u003e nerede (" belirteç ", $ belirteç) -\u003e where_raw (" Token_Validity\u003e şimdi () ") -\u003e find_one (); eğer (! $ Sonuç) (false dönüş;) Yeni kullanıcı ($ sonuç) iade edin ($ sonuç) ;) / ** * Bir kullanıcıya * @param string $ e-posta adresini yazın veya kaydettirin. Özel e-posta adresi * @return Kullanıcı * / Genel Adres ($ e-posta) (// Böyle bir kullanıcı zaten varsa, kullanıcı işlevinin değerini döndürürse Veritabanında depolanan belirtilen e-posta adresinden (kullanıcı :: ($ e-posta)) ($ e-posta)) (Yeni Kullanıcı ($ e-posta) iade edin;) // Aksi takdirde yeni bir kullanıcı oluşturun Veritabanındaki TV ve Kullanıcı işlevinin değerini döndürün :: Belirtilen e-posta adresinden oluşturun Kullanıcı :: Oluştur ($ e-posta); ) / ** * Yeni bir kullanıcı oluşturun ve Veritabanını * @param String $ e-posta adresinden kaydedin. Kullanıcı e-posta adresi * @return Kullanıcı * / Özel statik fonksiyon oluşturun ($ e-posta) (// Yeni bir kullanıcı yazın ve kullanıcı işlevinin sonucunu bu değerlerden iade edin $ Sonuç \u003d Orm :: for_table ("reg_users") - \u003e Oluştur (); $ Sonuç-\u003e E-posta \u003d $ e-posta; $ Sonuç-\u003e Kaydet (); Yeni Kullanıcı ($ Sonuç);) / ** * Böyle bir kullanıcının veritabanında bulunduğunu kontrol edin ve değişken değerini iade edin Değişken * @param string $ e-posta. Özel e-posta adresi * @return boolean * / kamu statik fonksiyonu ($ e-posta) (// veritabanında bir kullanıcı var mı? $ Sonuç \u003d Orm :: for_table ("reg_users") -\u003e nerede ("e-posta", $ e-posta ) -\u003e say (); $ sonuç \u003d\u003d 1;) / ** * Yeni bir kullanıcı nesnesi * @param örneği oluşturma * @param örneği $ param orm, kimliği, e-posta veya 0 * @return Kullanıcı * / Genel İşlev __Construct ($ Param \u003d null) (eğer ($ param örneği ORM) (// orm kontrolü, $ 'ya-\u003e orm \u003d $ parfüze geçerse) başka bir şey varsa (is_string ($ param)) (// e-posta kontrol $ this-\u003e om \u003d Om :: for_table ("reg_users") -\u003e nerede ("e-posta", $ param) -\u003e find_one ();) başka ($ id \u003d 0; ise (iS_Numeric ($ param)) (// kullanıcı tanımlayıcısı, değerine iletilir $ parametreli $ kimlik değeri \u003d $ param;) eğer (issas ($ _ seansı ["loginid"])))) (// aksi takdirde $ ID \u003d $ _SESSION ["loginid"];) $ Bu-\u003e Orm \u003d orm :: for_table ("reg_users") -\u003e nerede ("kimlik", $ kimliği) -\u003e find_one ();))) / ** * Yeni SHA1 yetkilendirme belirteci, yazıyor Veritabanında ve değerini döndürür * @ Return String * / Kamu İşlevi Generatetoken () () (// Yetkili bir kullanıcı için bir belirteç oluşturun ve $ TONEN \u003d SHA1'e kaydedin ($ this-\u003e e-posta.Time (). Rand (0 , 1000000)); // Veritabanında belirteçleri kaydedin // Aşağıdaki dakikalardan sadece 10'unda ("belirteç", $ belirteci) yalnızca 10'da alakalı olduğunu işaretleyin; $ this-\u003e orm-\u003e set_expr ("Token_Validity", "AddTime (Şimdi ()," 0:10 ")"); $ Bu-\u003e Om-\u003e Kaydet (); $ Belirteç iade; ) / ** * Kullanıcı * @return Void * / Halk işlevi girişi () (// bir kullanıcıyı yetkili $ _SESSION ["loginid"] \u003d $ this-\u003e Orm-\u003e ID; // değerini yenileyin Last_login taban alanı $ BU-\u003e OM-\u003e SET_EXPR ("last_login", "şimdi ()"); $ Bu-\u003e Orm-\u003e Kaydet ();) / ** * Oturumu imha edin ve kullanıcıyı * @return Void * / Halk Fonksiyonu Logout () ($ _SESSION \u003d dizi ()); UnSet ($ _ seans);) / ** * Kullanıcı gelip gelmediğini kontrol edin * @return Boolean * / Genel işlev loggedin () () BU-\u003e ORM-\u003e ID) && $ _SESSION ["LOGITID"] \u003d\u003d $ BU-\u003e ORM-\u003e ID;) / ** * Kontrol, Kullanıcı Yöneticisi * @return Boolean * / Halk Fonksiyonu ISADMIN () $ this-\u003e rank () \u003d \u003d "yönetici";) / ** * Bir kullanıcı türünü bulun, belki de Yönetici veya Düzenli * @return String * / Genel İşlev Sıralaması () (eğer ($ this-\u003e orm-\u003e sıralaması \u003d\u003d 1) ("Yönetici" i'ye döndürün;) "Normal" döndürün;) / ** * Yöntem özel bilgi almanıza izin verir Kullanıcı Hesabı Kullanıcının Kalite Özellikleri * @Param String $ Key Özellik Özelliği Access * @return Karışık * / Genel İşlev __Get ($ tuş) (eğer (ISSET ($ this-\u003e Ор -\u003e $ tuş)) $ this-\u003e orm -\u003e $ anahtar; ) Null dönüş; ))

Jetonlar SHA1 algoritması kullanılarak üretilir ve veritabanında saklanır. Tokeny'nin alaka düzeyinin 10 dakikalık kısıtlama ayarlamak için MySQL zaman işlevlerini kullanıyorum.

Belirteç doğrulama prosedürünü geçtiğinde, doğrudan tken_validy sütununda depolanan son kullanma tarihi olmayan belirteçleri düşündüğümüz işleyiciyle doğrudan konuşuyoruz.

Sihirli yöntemi kullandığımı unutmayın __almak. DOCS Kütüphaneleri, kullanıcı nesnesinin özelliklerine erişimi engellemek için dosyanın sonunda.

Bundan dolayı, özellikler sayesinde veritabanında depolanan bilgilere erişmek mümkün hale gelir. $ Kullanıcı-\u003e E-posta, $ Kullanıcı-\u003e Token et al. Aşağıdaki kod parçasında, bir örnek olarak, bu sınıfları nasıl kullanacağınızı düşünün.


Korumalı sayfa

Faydalı ve gerekli işlevleri saklayan başka bir dosya bir dosyadır. fonksiyonlar.php.. Diğer dosyalarda daha temiz ve okunabilen bir kod oluşturmanıza olanak sağlayan birkaç yardımcı yardımcılığa sahiptir.

fonksiyonlar.php.

Send_Email ($, $ 'dan, $ konusu, $ mesajı) (// Helper, e-posta gönderme $ başlıkları \u003d "MIME-Version: 1.0". "\\ R \\ n"; $ Başlıklar. \u003d "İçerik türü: Metin / Ova; Charset \u003d UTF-8 "." \\ R \\ n "; $ Başlıklar. \u003d" Dan: ". $ 'Dan." \\ R \\ n "; iade postası ($' ı, $ konusu, $ mesaj, $ başlıklar );) Fonksiyon get_page_url () (// ABD PHP dosyasını URL \u003d "http" belirleyin. (Boş ($ _ Sunucu ["https"])? "": "S"). ": //" $ _ Sunucu ["Server_name"]; eğer (ISSET ($ _ SUNUCUKI ["Request_uri"]) && $ _Server ["Request_uri"]! \u003d "") ($ URL. \u003d $ _Server ["Request_uri"];) başka ($ URL) . \u003d $ _Server ["path_info"];) $ URL;) fonksiyon rate_limit ($ ip, $ limit_hour \u003d 20, $ limit_10_min \u003d 10) (// bu IP adresindeki son saat için giriş denemesi sayısı $ $ count_hour \u003d Orm :: for_table ("reg_login_attemptenm") -\u003e nerede ("ip", sprintf ("% u", IP2Long ($ IP))) -\u003e where_raw ("TS\u003e Subtime (şimdi ()," 1:00 " ) ") -\u003e Count (); // Bu IP adresindeki son 10 dakikada giriş girişimlerinin sayısı $ COUNT_10_MIN \u003d Orm :: for_table (" reg_login_attempt ") -\u003e nerede (" ip ", sprint F ("% u", IP2Long ($ IP)))) -\u003e where_raw ("TS\u003e SUBTE (şimdi (şimdi ()," 0:10 ")") -\u003e Count (); if ($ count_hour\u003e $ Limit_hour || $ count_10_min\u003e $ limit_10_min) (yeni bir istisna atın ("Çok fazla oturum açma denemesi!");)) işlevi Puan_limit_tick ($ ip, $ e-posta) (// Tabloda yeni bir giriş oluştur) Bu, giriş denemesi sayısını kabul eden $ login_attempt \u003d Orm :: for_table ("reg_login_attemptent") -\u003e Oluştur (); $ login_attempt-\u003e e-posta \u003d $ e-posta; $ login_attempt-\u003e ip \u003d sprintf ("% u", IP2Long ($ IP )); $ login_attempt-\u003e kaydet ();) Function Redirect ($ URL) (Başlık ("Konum: $ URL"); çıkış;)

Fonksiyonlar rate_limit. ve rate_limit_tick. Bunu, ilk girişimin anından itibaren süresi dolmuş bir süre için yetkilendirme girişimlerinin sayısını takip ederler. Giriş girişimi, Veritabanında REG_LOGIN_Atptement sütununda kaydedilir. Bu işlevler, bir sonraki kod parçasından görebileceğiniz şekilde form verilerini işleme koyarken ve gönderirken çağrılır.

Kod aşağıdaki dosyadan alınır. index.php. Ve formun gönderilmesini işler. Bu, dosyada jquery tarafından işlendiği bir JSON tepkisi döndürür. varlıklar / JS / Script.jsdaha önce zaten demonte ettiğimiz.

index.php.

Deneyin (eğer (! Boş ($ _ posta) && isset ($ _ Sunucu ["http_x_requested_with"]))) (// bir JSON başlık başlığı ("İçerik tipi: Uygulama / JSON"); // bu e-posta adresidir Geçerli ise (! İsset ($ _ post ["e-posta"]) ||! Filter_var ($ _ sonrası ["e-posta"], filter_validate_email)) (yeni bir istisna atın ("Lütfen geçerli bir e-posta girin");) // kontrol . Kullanıcının giriş yapmasına izin verilir mi, izin verilen bağlantıların sayısını aştırır mı? (Daha fazla bilgi için fonksiyonlar.php dosyası) RATE_LIMIT ($ _ SUNUCU ["Remote_addr"]); // Puan_limit_tick ($) yetkilendirmek için bu girişimi kaydedin _ Sunucu ["remote_addr"], $ _POST ["e-posta"]); // $ mesaj \u003d "", $ e-posta \u003d $ _post ["e-posta"]; $ konu \u003d "Giriş bağlantınız"]; eğer (! Kullanıcı :: var ($ e-posta)) ($ e-posta)) ($ konu \u003d "Kayıt olduğunuz için teşekkür ederiz!"; $ MESAJ \u003d "Sitemize kayıt olduğunuz için teşekkür ederiz! \\ n \\ n";) // yetkilendirme denemesi veya USER $ user \u003d user :: loginansister ($ _ sonrası ["e-posta"]); $ mesaj. \u003d "Bu URL'den giriş yapabilirsiniz: \\ n" ; $ mesaj. \u003d get_page_url (). "? TKN \u003d". $ User-\u003e Generatetoken (). "\\ n \\ n"; $ Mesaj. \u003d "Bağlantı 10 dakika sonra otomatik olarak sona eriyor."; $ Sonuç \u003d send_email ($ fripail, $ _POST ["e-posta"], $ konu, $ mesaj); İf (! $ Sonuç) (yeni bir istisna attı ("e-postanızı gönderen bir hata oluştu. Lütfen tekrar deneyin.");) Ölün (JSON_ENCODE (Dizi ("mesajı" \u003d\u003e "Teşekkürler! Gelen kutunuza. ") SPAM klasörünüzü de kontrol edin.")));) Yakalamak (JSON_ENCODE (Dizi (hata "\u003d\u003e 1," Mesaj "\u003d\u003e $ e-\u003e getmessage ())));)

Başarılı Yetkilendirme / Kayıt Kodu'ndan sonra, kullanıcı kullanıcıya yetkilendirmek için bir bağlantı gönderir. Tocken ekonomik hale gelir, çünkü Oluşturulan bağlantı yönteminde bir değişken olarak iletilir. $ _GET. Tkn marker ile

index.php.

İf (isset ($ _ almak ["tn"]))) (// bu belirteç, yetkilendirme için geçerli midir? $ User \u003d user :: findbyton ($ _ almak ["tkn"]); if ($ user) (//) Evet. $ Kullanıcı-\u003e login () 'nin korunan sayfasına yönlendirilmesi için, yönlendirme ("protected.php");) // hayır, belirteç geçerli değil. Formla sayfada bir yönlendirme uygulamak Yönlendirme yetkisi / kaydı ("index.php");)

$ Kullanıcı-\u003e Giriş ()

oturum için gerekli değişkenleri oluşturun, böylece kullanıcı, sonraki site sayfalarına bakacak şekilde, her zaman yetkilendirilecektir.

Benzer şekilde, sistemden çıkma işlevinin işlenmesi de düzenlenir.

index.php.

İf (isset ($ _ almak ["logout"]))) ($ user \u003d yeni kullanıcı (); eğer ($ user-\u003e loggedin ()) ($ user-\u003e logout ()) ($ user-\u003e logout ();) yönlendirme ("index.php" );)

Kodun sonunda, tekrar index.php, böylece parametre bir yönlendirme koydum. ? LOGOUT \u003d 1 URL tarafından gerekli değildir gerekli değildir.

Dosyamız. index.php. Ekleme gerektirir. Koruma - Sistemde oturum açtığımızda, bir kez daha kayıt olan kişilerin kayıt formunu görmesini istemiyoruz. Bu amaçlar için yöntemi kullanıyoruz $ Kullanıcı-\u003e LogGIN ().

index.php.

$ User \u003d yeni kullanıcı (); if ($ user-\u003e loggedin ()) (yönlendirme ("protected.php");)

Son olarak, burada sitenizin sayfalarını korumanıza ve yalnızca yetkilendirmeden sonra kullanılabilir hale getirmenizi sağlayan bir kod parçası.

korumalı.php.

// Sitenizdeki her sayfayı korumak için // main.php dosyasını bağlayın ve yeni bir kullanıcı nesnesi oluşturun. Bu kadar kolay! Request_once "içerir / main.php"; $ User \u003d yeni kullanıcı (); İf (! $ User-\u003e loggedin ()) (yönlendirme ("index.php");)

Bu kontrolden sonra, kullanıcının başarıyla yetkilendirildiğinden emin olabilirsiniz. Ayrıca, nesne özelliklerini kullanarak veritabanındaki depolanan bilgilere de erişebilirsiniz. $ Kullanıcı.. E-posta ve kullanıcıyı ve durumunu görüntülemek için bu kodu kullanın:

"E-postanızı:" $ user-\u003e e-posta; Echo "Sıranız:" $ user-\u003e rütbe ();

Yöntem rütbe () Burada kullanılan, çünkü veritabanı genellikle saklanır (normal bir kullanıcı için 0, yönetici için 1) ve bu verileri bizimle ilgili durumlara dönüştürmemiz gerekir ve bu yöntem yardımcı olur.

Bir yönetici düzenli bir kullanıcıdan yapmak için, kullanıcı girişini phpmyadmin (veya veritabanlarını yönetmenize izin veren herhangi bir program) aracılığıyla düzenleyin. Yönetici durumu herhangi bir ayrıcalık vermez, bu örnekte sayfadaki bir yönetici olduğunuz için görüntülenecektir - ve bu kadar.

Fakat bununla ne yapmalı - bu sizin takdirinize bağlı olarak kalır, yöneticiler için belirli ayrıcalıkları ve fırsatları tanımlayan bir kod yazabilir ve oluşturabilirsiniz.

Bitirdik!

Bu inanılmaz süper quasi basit formu ile bittik! PHP sitelerinizde kullanabilirsiniz, yeterince kolaydır. Ayrıca kendinizin altında da değiştirebilir ve istediğiniz gibi yapabilirsiniz.

Site sitesi için özel olarak Denis Bebek hazırlanan malzeme

P.S. PHP ve OOP ustalaşmada ilerlemek ister misiniz? PHP programlaması dahil olmak üzere, PHP programlaması dahil olmak üzere, PHP programlaması dahil olmak üzere, Site binalarının çeşitli yönleriyle ilgili birinci sınıf derslere dikkat edin.

Malzemeyi beğendiniz ve teşekkür etmek ister misiniz?
Sadece arkadaşlarınızla ve meslektaşlarınızla paylaşın!


1. Veritabanında kullanıcıların oluşturulmasıyla başlayalım. Kullanıcı verileri (giriş ve şifre) içerecektir. PhpmyAdmin'e gidelim (PC'nizde bir veritabanı oluşturursanız http: // localhost / phpmyadmin /). Bir masa oluştur kullanıcılar.3 alanı olacak.

MySQL veritabanında yaratıyorum, başka bir veritabanında oluşturabilirsiniz. Sonra, değerleri resimdeki gibi ayarlayın:

Tıklayın " Kayıt etmek"Peki bir masamız var.
2. Bu tabloya bağlanmak gerekir. Bir dosya oluşturalım bd.php.. Bu içerik:

Benim durumumda şöyle görünüyor:

BD.php'u kaydet.
Mükemmel! Veritabanında bir masamız var, bununla bağlantı. Artık kullanıcıların verilerini bırakacağı bir sayfa oluşturmaya başlayabilirsiniz.
3. Bir dosya oluşturun reg.php. İçeriği ile (içerideki tüm yorumlar):
giriş

giriş


4. Veritabanına verileri etkinleştirecek ve kullanıcıyı kaydeder. Save_user.php.(İçindeki yorumlar):

5. Şimdi kullanıcılarımız kayıt olabilir! Daha sonra, siteye kayıtlı kullanıcılara girmek için "kapıyı" yapmanız gerekir. index.php. (İçindeki yorumlar):
Ana Sayfa

Ana Sayfa


Kayıt ol


";) Başka (// boş değilse, eko bağlantısını gösteriyoruz", siteye girdiniz. "$ _ Oturumu [" Giriş "]."
Bu bağlantı yalnızca kayıtlı kullanıcılar için kullanılabilir ";)?\u003e
Dosyada index.php. Sadece kayıtlı kullanıcılar için açık olacak bir referansı geri çekeceğiz. Bu, komut dosyasının tüm özüdür - herhangi bir veriye erişimi sınırlamak için.
6. Girilen giriş ve şifreyi kontrol eden bir dosya kaldı. Testre.php. (İçindeki yorumlar):

Bu kadar! Belki bir ders ve sıkıcı, ama çok faydalı. Yalnızca kayıt fikri burada gösterilir, daha sonra geliştirebilirsiniz: Koruma, Tasarım, Veri içeren alanlar ekleyin, Avatarlar Yükleme, Hesaptan Çıktı (bunun için bir işlevle oturumdan değişkenleri yok et) ayrılmamış.) vb. İyi şanslar!

Her şeyi kontrol ettim, iyi çalışıyor!

Merhaba, bu eğitimdeki arkadaşlar, PHP saklı yordamını kullanarak kullanıcı kaydını ve giriş yapacağız.
Bu eğitim için dosya yapısı
Config.php.
index.php.
check_availability.php.
login.php.
Welcome.php.
LOGOUT.php.
SQL tablosu yapısı tblregistration

Masa oluşturun `tblregistration` (int (11) null değil, 'fullname` varchar (200) null değil,` `vailid` varchar (200) null değil,` şifre' varchar (255) null değil, `regdate 'zaman damgası Null varsayılan değil current_timestamp) motor \u003d innoDB varsayılan charset \u003d latin1;

config.php.

MySQLI uzantısını kullanarak DB yapılandırma dosyası oluşturun. Yapılandırmanıza göre kimlik bilgilerini sağlayın

index.php.

UPER Kayıt için bir HTML formu oluşturun.

Kayıt ol

ZATEN KAYITLI. Giriş yapın.

Kullanıcı e-posta kullanılabilirliği için JQuery / Ajax

check_availability.php.

Bu sayfada, kullanıcı e-posta kullanılabilirliğini kontrol edeceğiz. Adlı bir mağaza prosedürü oluşturun
Mağaza prosedür kodu:

Sınırlayıcı $ kesintisiz \u003d `root` @` localhost` prosedürü` checkAliailbity` (`e-posta` varchar (255)) NO SQL NO Emailid \u003d e-posta $ sınırlayıcı;

Şimdi kullanıcı kaydı için bir mağaza prosedürü oluşturun.
Kullanıcı Kaydı İçin Mağaza Prosedürü

Sınırlayıcı $ Kreener \u003d `root` @` localhost` prosedürü` Kayıt Defteri` ("fname` varchar (200), 'mailid` varchar (200),` parola` varchar (255)), tblregistration içine SQL ekleme ( Tam ad, e-posta, şifre) değerleri (fname, mailid, şifre) $ sınırlayıcı;

Mağaza prosedürünün oluşturulmasından sonra mağaza prosedürünü çalıştırın.

";) Başka (yankı""; } } ?>

İşte kayıt için yazdığımız tüm kod ( index.php.):

alert("Registration Successfull");";) Başka (yankı""; } } ?> Mağaza prosedürünü kullanarak kayıt

Kayıt ol

ZATEN KAYITLI. Giriş yapın.

giriş .php.

Bir giriş formu kullanıcı girişi oluşturun.

Şimdi ad girişi ile giriş yapmak için bir mağaza prosedürü oluşturun.
Giriş Mağazası Prosedürü:

Sınırlayıcı $ Kreicker \u003d `root '@ localhost` prosedürü` girişi (` `` `` `` `` `` `` da (255)) NO SQL NO EmailID, TBLREGISTRATION'DAN ŞİFRE, Emailid \u003d UserEmail ve Şifre \u003d Şifre $ Sınırlayıcı;

Şimdi giriş mağazası prosedürünü çalıştırın

"$ Ekstra \u003d" login.php ";))?\u003e

İşte giriş için yazdığımız tüm kod ( login.php.):

0) ($ _SESSION ["login"] \u003d $ _ post ["useremail"]; başlık ("Konum: welcome.php");) başka ($ _SESSION ["login"] \u003d $ _ post ["useremail"] ; echo ""; $ ekstra \u003d" login.php ";))?\u003e SASA Giriş Mağazası Prosedürü.

welcome.php.

Giriş yaptıktan sonra, Welcome.php'e yönlendirilecek. Bir kullanıcı bu sayfaya (Welcome.php) doğrudan erişmeyi deneyin Eğer bu sayfayı doğrudan bu sayfayı doğrulayacaksa, kullanıcının login.php sayfasını yönlendirecektir.

Sayfaya hoşgeldiniz

Hoşgeldiniz:

Çıkış Yap.

lOGOUT.php.

Giriş oturumunu yok etmek için. Session_destroy tüm aktif oturumları imha edecektir.

Bir kayıt sistemi oluşturma süreci oldukça büyük miktarda iştir. E-posta adreslerinin geçerliliğini prova edeceğimi, e-posta mektuplarını onaylayan bir kod yazmanız gerekir, şifreyi geri yükleme fırsatı sunar, güvenli bir yerde şifreleri, giriş formlarında ve çok daha fazlasını kaydetmiş olur. Hepiniz yaptığınızda bile, kullanıcılar isteksizce kayıt yaptıracak, çünkü en az kayıt etkinliklerini bile gerektiriyor.

Bugünün rehberinde, herhangi bir şifreye ihtiyacınız olmayacağınız basit bir kayıt sistemi geliştireceğiz! Sonuçları alacağız, mevcut bir PHP sitesine kolayca değiştirilebilecek veya gömülebilen sistem. Eğer ilgileniyorsanız, okumaya devam edin.

Php.

Şimdi PHP kodunu yapmaya hazırız. Kayıt sisteminin temel işlevselliği, aşağıda görebileceğiniz kullanıcı sınıfı tarafından sağlanır. Sınıf, veritabanlarıyla çalışmak için minimalist bir kütüphane olan () kullanır. Kullanıcı sınıfı, veritabanlarına erişmekten, oturum açmak için belirteçleri ve onların doğrulamaları için sorumludur. Bize PHP tabanlı sitelerinizdeki kayıt sistemine kolayca dahil edilebilecek basit bir arayüzü temsil eder.

User.class.php.

// özel orm örneği
Özel $ orm;

/**
* Bir belirteç dizisi tarafından bir kullanıcı bulun. Sadece geçerli belirteçler alınır
* Dikkate alın. Bir belirteç, üretildikten sonra 10 dakika boyunca geçerlidir.
* @param string $ belirteci
* @return kullanıcısı.
*/

Halka açık statik fonksiyon findbyton ($ belirteç) (

// veritabanında bul ve zaman damgasının doğru olduğundan emin ol


-\u003e nerede ("belirteç", $ belirteç)
-\u003e where_raw ("Token_Validity\u003e şimdi ()")
-\u003e find_one ();

İf (! $ Sonuç) (
Yanlış döndür;
}

Yeni kullanıcıya ($ sonuç) iade etmek;
}

/**
* Giriş yapın ya da bir kullanıcıyı kaydedin.
* @return kullanıcısı.
*/

Halka açık statik fonksiyon loginoregister ($ e-posta) (

// Böyle bir kullanıcı zaten varsa, iade edin

İf (kullanıcı :: var ($ e-posta) ($ e-posta)) (
Yeni kullanıcıya ($ e-posta) iade edin;
}

// Aksi takdirde, oluşturun ve iade edin

İade kullanıcısı :: Oluştur ($ e-posta);
}

/**
* Yeni bir kullanıcı oluşturun ve veritabanına kaydedin
* @Param string $ E-posta Kullanıcının e-posta adresini e-posta ile gönder
* @return kullanıcısı.
*/

Özel Statik Fonksiyon Oluştur ($ e-posta) (

// veritabanına yeni bir kullanıcı yazın ve iade edin

$ Sonuç \u003d Orm :: for_table ("reg_users") -\u003e Oluştur ();
$ Sonuç-\u003e E-posta \u003d $ e-posta;
$ Sonuç-\u003e Kaydet ();

Yeni kullanıcıya ($ sonuç) iade etmek;
}

/**
* Böyle bir kullanıcının veritabanında olup olmadığını kontrol edin ve bir Boolean döndürün.
* @Param string $ E-posta Kullanıcının e-posta adresini e-posta ile gönder
* @return boolean
*/

Kamu statik fonksiyonu ($ e-posta) var ($ e-posta) (

// kullanıcı veritabanında var mı?
$ Sonuç \u003d Orm :: for_table ("reg_users")
-\u003e nerede ("e-posta", $ e-posta)
-\u003e sayım ();

$ Sonuç \u003d\u003d 1;
}

/**
* Yeni bir kullanıcı nesnesi oluşturun
* @param $ param orm örneği, kimlik, e-posta veya null
* @return kullanıcısı.
*/

Kamu İşlevi __Construct ($ param \u003d null) (

Eğer ($ param örneği OM) ise (

// bir orm örneği geçti
$ this-\u003e orm \u003d $ param;
}
Başka ise (is_string ($ param)) (

// bir e-posta geçti
$ bu-\u003e
-\u003e nerede ("e-posta", $ param)
-\u003e find_one ();
}
BAŞKA (

Eğer (is_numeric ($ param)) (
// bir kullanıcı kimliği parametre olarak kabul edildi
$ id \u003d $ param;
}
Başka eğer (issas ($ _ oturumu ["loginid"])) (

// Kullanıcı kimliği geçmedi, Sesion'a bakın
$ id \u003d $ _Session ["loginid"];
}

$ this-\u003e orm \u003d orm :: for_table ("reg_users")
-\u003e nerede ("id", $ kimliği)
-\u003e find_one ();
}

/**
* Yeni bir SHA1 giriş belirteci oluşturur, veritabanına yazar ve iade eder.
* @return string.
*/

Kamu İşlevi Generatetoken () () ()
// Giriş yapanlar için bir jeton oluşturun. Veritabanına kaydedin.

$ tOKEN \u003d SHA1 ($ this-\u003e e-posta.Time (). RAND (0, 1000000));

// belirteçleri veritabanına kaydedin
// ve sonraki 10 dakika için geçerli olarak işaretleyin

$ BU-\u003e OM-\u003e SET ("TEKEN", $ TOKEN);
$ this-\u003e orm-\u003e set_expr ("Token_Validity", "AddTime (Şimdi ()," 0:10 ")");
$ Bu-\u003e Om-\u003e Kaydet ();

$ Belirteç iade;
}

/**
* Bu kullanıcıya giriş yapın
* @return geçersiz
*/

Genel işlev girişi () () () ()

// kullanıcıyı oturum açarken işaretleyin
$ _SESSION ["loginid"] \u003d $ Bu-\u003e Orm-\u003e ID;

// last_login db alanını güncelle
$ this-\u003e orm-\u003e set_expr ("last_login", "şimdi ()");
$ Bu-\u003e Om-\u003e Kaydet ();
}

/**
* Oturumu imha edin ve kullanıcıyı kapatın.
* @return geçersiz
*/

Halk Fonksiyonu Logout () () () () (
$ _SESSION \u003d dizi ();
Unsem ($ _ seans);
}

/**
* Kullanıcının giriş yapıp geçtiğini kontrol edin.
* @return boolean
*/

Halk Fonksiyonu LogGIN () () () ()
İade Dönüştürme ($ Bu-\u003e ORM-\u003e ID) && $ _SESSION ["LOGITID"] \u003d\u003d $ BU-\u003e ORM-\u003e ID;
}

/**
* Kullanıcının yönetici olup olmadığını kontrol edin
* @return boolean
*/

Kamu fonksiyonu isadmin () () ()
$ This-\u003e rank () \u003d\u003d "yönetici" i geri dönün;
}

/**
* Kullanıcı türünü bulun. Yönetici veya düzenli olabilir.
* @return string.
*/

Halka açık fonksiyon rütbesi () () () () (
Eğer ($ this-\u003e om-\u003e rank \u003d\u003d 1)
"Yönetici" i'ye dönün;
}

"Düzenli" i'ye dönün;
}

/**
* Özel unsurlara erişmek için sihirli yöntem
* $ ORM örneği kullanıcı nesnesinin özellikleri olarak
* @Param string $ tuşuna erişilen özelliğin adı
* @return karışık
*/

Kamu İşlevi __Get ($ Key) (
İf (isset ($ this-\u003e orm -\u003e $ tuş)) (
$ This-\u003e orm -\u003e $ tuşunu geri getirin;
}

Null dönüş;
}
}
Token-S algoritma tarafından üretilir ve veritabanında saklanır. Tken_Validy sütunundaki değeri 10 dakikaya eşit olarak ayarlamak için MySQL'den kullanıyoruz. Doğrulama tken, motoru belirttiğimiz şekilde bildiririz, Token_Validity Field henüz sona ermedi. Bu yüzden, TKY'nin geçerli olacağı süreyi sınırlıyoruz.

Kullanıcı nesnesinin özelliklerine erişmek için belgenin sonunda __get () sihirli yöntemini kullandığımızı lütfen unutmayın. Bu, veritabanında depolanan verilere özellikler biçiminde erişmemize izin verir: $ user-\u003e e-posta, $ user-\u003e belirteci. Örneğin, bu sınıfı aşağıdaki kod parçasında nasıl kullanabileceğimizi görelim:


Gerekli işlevselliğin depolandığı başka bir dosya işlevidir. Kalan kodu daha temiz tutmamıza izin veren birkaç yardımcı fonksiyon var.

Fonksiyonlar.php.

Send_email işlevi ($, $ 'dan, $ konusu, $ mesaj) (

// e-posta göndermek için yardımcı fonksiyon

$ Başlıklar \u003d "MIME-Version: 1.0". "\\ r \\ n";
$ Başlıklar. \u003d "İçerik türü: Metin / Sade; Charset \u003d UTF-8". "\\ r \\ n";
$ Başlıklar. \u003d "Dan:". $ Dan. "\\ r \\ n";

Dönüş Posta ($ 'ı, $ konusu, $ mesaj, $ başlıklar);
}

function get_page_url () () () () (

// bir PHP dosyasının URL'sini bulun

$ url \u003d "http". (Boş ($ _ Sunucu ["https"])? "": "S"). ": //" $ _ Sunucu ["server_name"];

İf (ISSET ($ _ sunucu ["Request_uri"]) && $ _Server ["Request_uri"]! \u003d "") (
$ Url. \u003d $ _Server ["Request_uri"];
}
BAŞKA (
$ Url. \u003d $ _Server ["path_info"];
}

$ URL;
}

function rate_limit ($ ip, $ limit_hour \u003d 20, $ limit_10_min \u003d 10) (

// bu IP adresi tarafından son saat için giriş girişimlerinin sayısı

$ Count_hour \u003d orm :: for_table ("reg_login_attempt")
->
-\u003e where_raw ("TS\u003e SubTime (şimdi ()," 1:00 ")")
-\u003e sayım ();

// bu IP adresi ile son 10 dakika için giriş denemesi sayısı

$ Count_10_min \u003d orm :: for_table ("reg_login_attempt")
-\u003e nerede ("ip", sprintf ("% u", IP2Long ($ IP))))
-\u003e where_raw ("TS\u003e SubTime (şimdi ()," 0:10 ")")
-\u003e sayım ();

İf ($ count_hour\u003e $ limit_hour || $ COUNT_10_MIN\u003e $ LIMIT_10_MIN) (
Yeni bir istisna atmak ("Çok fazla giriş denemesi!");
}
}

fonksiyon rate_limit_tick ($ ip, $ e-posta) (

// giriş girişimi tablosunda yeni bir kayıt oluştur

$ login_attemt \u003d orm :: for_table ("reg_login_attemptent") -\u003e Oluştur ();

$ login_attempt-\u003e e-posta \u003d $ e-posta;
$ login_attempt-\u003e ip \u003d sprintf ("% u", IP2Long ($ IP));

$ login_attempt-\u003e kaydet ();
}

fonksiyon Yönlendirme ($ URL) (
Başlık ("Yer: $ URL");
çıkış;
}
Puan_limit ve rate_limit_tick işlevleri, belirli bir süre için yetkilendirme girişimlerinin sayısını sınırlamamıza izin verir. Yetkilendirme girişimleri, REG_LOGIN_ATTEMPT veritabanında kaydedilir. Bu işlevler, aşağıdaki kod parçasında görülebileceği gibi, yetkilendirme formunu onaylarken başlatılır.

Aşağıdaki kod index.php'den alınmıştır ve yetkilendirme şeklinin onaylanmasından sorumludur. Varlıklarda / JS / Script.js'de gördüğümüz jquery kodu tarafından kontrol edilen JSON tepkisi döndürür.

index.php.

İf (! Boş ($ _ posta) && isset ($ _ sunucu ["http_x_requestown_with"]))) (

// bir json başlığı çıktı

Başlık ("İçerik türü: Uygulama / JSON");

// e-posta adresi geçerli mi?

İf (! İsset ($ _ post ["e-posta"]) ||! Filter_var ($ _ post ["e-posta"], filter_validate_email)) (
Yeni istisna atmak ("Lütfen geçerli bir e-posta girin");
}

// Bu, eğer yukarıda ise bir istisna atar
// izin verilen giriş girişimi sınırları (daha fazlası için fonksiyonlara bakın.):
rate_limit ($ _ sunucu ["remote_addr"]);

// bu giriş girişimi kaydet
rate_limit_tick ($ _ sunucu ["remote_addr"], $ _POST ["e-posta"]);

// mesajı kullanıcıya gönderin

$ mesaj \u003d "";
$ e-posta \u003d $ _post ["e-posta"];
$ konu \u003d "Giriş bağlantınız";

İf (! Kullanıcı :: var ($ e-posta)) (
$ konu \u003d "Kayıt olduğunuz için teşekkür ederiz!";
$ MESAJ \u003d "Sitemize kayıt olduğunuz için teşekkür ederiz! \\ N \\ n";
}

// kişiyi giriş yapma veya kaydetme girişimi
$ user \u003d user :: loginoregister ($ _ sonrası ["e-posta"]);

$ Mesaj. \u003d "Bu URL'den giriş yapabilirsiniz: \\ n";
$ mesaj. \u003d get_page_url (). "? TKN \u003d". $ User-\u003e Generatetoken (). "\\ n \\ n";

$ Mesaj. \u003d "Bağlantı 10 dakika sonra otomatik olarak sona eriyor.";

$ Sonuç \u003d send_email ($ fripail, $ _POST ["e-posta"], $ konu, $ mesaj);

İf (! $ Sonuç) (
Yeni İstisna Atma ("E-postanızı gönderen bir hata oluştu. Lütfen tekrar deneyin.");
}

Öl (json_encode (dizi ()
"Mesaj" \u003d\u003e "Teşekkürler! Gelen kutunuza bir bağlantı gönderdik. SPAM klasörünüzü de kontrol edin. "
)));
}
}
yakalamak (istisna $ e) (

Öl (json_encode (dizi ()
"Hata" \u003d\u003e 1,
"Mesaj" \u003d\u003e $ e-\u003e getmessage ()
)));
}
Başarılı yetkilendirme veya kayıt olursa, yukarıdaki kod, yetkilendirme için bir kişiye e-postayı ifade eder. Token (Lexeme), oluşturulan URL'nin görünümünde $ _get-değişken "TKN" olarak kullanılabilir hale gelir.

index.php.

İf (issas ($ _ almak ["tkn"])) (

// Bu geçerli bir giriş belirteci mi?
$ User \u003d user :: findbyton ($ _ almak ["tkn"]);

// Evet! Kullanıcıya giriş yapın ve korumalı sayfaya yönlendirin.

$ User-\u003e login ();
Yönlendirme ("protected.php");
}

// geçersiz belirteç. Giriş formuna geri çevirin.
Yönlendirme ("index.php");
}
$ User-\u003e login () çalıştıran oturum için gerekli değişkenleri oluşturur, bu, kullanıcının sonraki girdilerde yetkilendirilmesine izin verecek.

Sistemden çıkış, yaklaşık olarak gerçekleştirilir:

İndex.php.

İf (issas ($ _ almak ["oturum açma"])) (

$ User \u003d yeni kullanıcı ();

İf ($ user-\u003e loggedin ()) () (
$ User-\u003e LOGOUT ();
}

Yönlendirme ("index.php");
}
Kodun sonunda, kullanıcıyı index.php adresinden yönlendiririz, böylece URL'deki parametre? LOGOUT \u003d 1 parametresi hariç tutulur.

LIDEX.php dosyamızın da korumaya ihtiyacı olacak - yetkili kullanıcıların formu görmesini istemiyoruz. Bunu yapmak için $ user-\u003e logged () yöntemini kullanıyoruz:

İndex.php.

$ User \u003d yeni kullanıcı ();

if ($ user-\u003e loggedin ()) () (
Yönlendirme ("protected.php");
}
Son olarak, sitenizin sayfasını nasıl koruyacağınızı görelim ve yalnızca yetkilendirmeden sonra kullanılabilir hale getirin:

korumalı.php.

// sitenizdeki herhangi bir PHP sayfasını korumak için ana.php dahil
// ve yeni bir kullanıcı nesnesi oluşturun. Bu kadar basit!

request_once "içerir / main.php";

$ User \u003d yeni kullanıcı ();

if (! $ user-\u003e loggedin ()) (
Yönlendirme ("index.php");
}
Bu kontrolden sonra, kullanıcının başarıyla yetkilendirildiğinden emin olabilirsiniz. Ayrıca, $ kullanıcı nesnesinin özellikleri olarak veritabanında depolanan verilere erişebilirsiniz. E-posta kullanıcısını ve sıralarını görüntülemek için aşağıdaki kodu kullanın:

"E-postanızı:" $ user-\u003e e-posta;
echo "Sıranız:" $ user-\u003e rütbe ();
Burada rank () bir yöntemdir, çünkü veritabanındaki rütbe sütunları genellikle rakamlar içerdiğinden (sıradan kullanıcılar için 0 ve yöneticiler için 1 için 0) ve hepsini bu yöntem kullanılarak uygulanan rütbelerin isimlerini dönüştürmemiz gerekir. Düzenli bir kullanıcıyı yöneticiye dönüştürmek için, kullanıcı kaydını phpmyadmin (veya başka bir veri veritabanı programında) düzenleyin. Yönetici olmak için kullanıcı bazı özel özelliklerle donatılmayacaktır. Yöneticileri destekleme haklarını seçme hakkındasınız.

Hazır!

Bu konuda, iddiasız kayıt sistemimiz hazır! Zaten mevcut PHP sitesinde veya kendi gereksinimlerinize bağlı kalarak onu yükseltmek için kullanabilirsiniz.