• Bir yetkilendirme sayfası oluşturmak için Html. HTML Formları Oluşturma

    Talimat

    Kullanıcıların forma kendi verilerini girmelerine izin veren ek etiketler yerleştirmeniz gereken etiketle kayıt formunu oluşturmaya başlayın.

    Html dosyasını açın ve kodu girmeye başlayın. Formu oluşturmaktan sorumlu etiket "form" dur. Etiketi "form action=”obrabotka.php” method=”post” name”forma1” nitelikleriyle birlikte yazıyoruz. Form öğeleri oluşturmaya başlayalım. Hemen hemen tüm öğeler, örneğin metin, parola vb. Niteliklerden herhangi birine her zaman "isim" adını veririz.

    Yazıyoruz: "br"İsmi giriniz: "br"

    "giriş tipi = "metin" adı = "fio""

    "br" Parolayı giriniz: "br"

    "giriş tipi = "şifre" ad = "şifre""

    "br"E-postayı Girin:l"br"

    "giriş tipi = "metin" ad = "e-posta"".

    Ardından, radyo düğmesi seçici öğesini oluşturuyoruz. Radyo düğmesi, imleç ve diğer radyo düğmeleriyle tıklandığında kapanan bir form öğesidir. Formumuzu bir örnekle açıklayalım. Bir kurs sipariş ederken, seçim CD veya DVD'den oluşacaktır, bu yüzden birini seçmeniz gerekir. Böyle bir düğmenin oluşturulmasından "tür" - "radyo" öznitelik öğesi sorumludur. Medya türü için aynı adı yazacağız, bu nedenle işleyicinin değişkenin değerini doğru bir şekilde belirleyebilmesi için "değer" özelliğini belirteceğiz. Kodu yazıyoruz: "br"Medya seçeneğini seçin:"br"

    "input type="radio" name="disc" value="cd"" CD "br"!}

    "input type="radio" name="disc" value="dvd"" DVD "br"!}

    Metne “değer” özelliği ayarlanmışsa, form bu özelliğe atadığımız değeri hemen gösterecektir. Örneğin, tam ad biçiminde zaten bir tür ad vardır (değer = "ad").

    Kullanıcıların formda birden fazla seçeneği işaretlemesine izin vermek için farklı bir öğe girin ve türü "onay kutusu" olarak ayarlayın. Örneğin:
    (Sevk edildiğinde bana ulaşın)
    (Abone olmak )

    Etiketi yazarak bir "Gönder" düğmesi oluşturun ve "gönder" yazın, değeri "Gönder" olarak yazın. Ayrıca, başka bir etikette, sırasıyla türü "sıfırla" ve değeri "Sıfırla" olarak ayarlayarak bir "Sıfırla" düğmesi yapın. Örneğin, bunun gibi:


    Gönder düğmesi verileri göndermek içindir ve Sıfırla düğmesi gerekirse formu temizlemek içindir.

    Formu sonlandırmak için bir kapanış etiketi girin. Sayfayı kaydedin.

    kaynaklar:

    • W3C web sitesi
    • web sitesi sipariş formu

    Kayıt formu yerleşik bir Joomla panel modülüdür. Eklemek için web programlama konusunda uzman olmanıza gerek yok. Ancak, değiştirmeye karar verirseniz, Community Builder bileşenini kullanarak veya manuel olarak uygulayabilirsiniz. Site oluşturmanın temellerini inceledikten sonra gerekli öğeleri düzenlemeniz yeterlidir.

    Talimat

    Joomla yönetici paneline gidin ve yerleşik modüllerin ayarlarını açın. "Gelişmiş" sekmesine gidin ve "Oluştur" düğmesini tıklayın. Kayıt formunu seçmeniz ve etkinleştirmeniz gereken "Modül Yöneticisi" penceresi görünecektir. Başlık için istediğiniz başlığı belirtin, "Başlığı göster" satırının yanındaki kutuyu işaretleyin.

    Kayıt formu modülündeki "İlk Metin" bölümünü açın ve ziyaretçiler için standart metni size uymuyorsa düzenleyin. "Giriş" öğesinde, kullanıcının sitede nasıl aranacağını seçebilirsiniz: onun adı veya oturum açma adı altında. Değişikliklerin geçerli olması için "Kaydet" düğmesini tıklayın.

    Community Builder'ı sitenize yükleyin. Bunu yapmak için "Paket dosyasını yükle" bölümüne gidin ve "Gözat" düğmesini tıklayın. Gerekli belgeleri seçtikten sonra "İndir ve kur" düğmesine tıklayın. Yönetici paneline gidin ve kurulu bileşeni çalıştırın.

    "Kayıt" sekmesini açın ve kayıt formunda gerekli değişiklikleri yapın. Bu uygulamanın kullanımı çok kolaydır, ancak yalnızca bir veya iki alanı değiştirmek istiyorsanız, manuel olarak düzenlemek daha uygun olacaktır.

    Kayıt formunda değişiklik yapmak için değiştireceğiniz dosyaları yedekleyin. Bu, tüm eylemleri geri almanıza ve arıza durumunda siteyi geri yüklemenize olanak tanır. Hangi alanı düzenlemek veya eklemek istediğinize karar verin. Örneğin kayıt formuna "Şehir" alanını eklemek istiyorsunuz.

    componentler/com_user/views/register/tmpl konumunda bulunan default.php dosyasını açın. Kayıt formuna uygun HTML kodunu yapıştırarak bir "Şehir" görüntüsü ekleyin. Bunu yapmak için başka herhangi bir öğeyi kopyalayabilir ve şehir (şehir) için düzenleyebilirsiniz. Bu değişiklikleri jos_users tablosunda yapın. library/joomla/database/table linkinde bulunan user.php dosyasını açın. Ona yeni bir değişken ekleyin. Ayarlarınızı kaydedin ve siteyi yeniden başlatın.

    kaynaklar:

    • joomla'da modül nasıl değiştirilir
    7. İpucu: Sahibi olmadan geçici kayıt nasıl yapılır?

    Mutlu yeni gelenlerin, ikamet yerine kayıt olma yasasının gerekliliğini (geçici kayıt yaptır) belirlenen süre - 90 gün içinde yerine getirmeleri her zaman mümkün değildir. Bazen bunun nedeni, daire sahibinin kayıt işlemlerini gerçekleştirmek için uygun kuruluşa gelme konusundaki isteksizliği veya yetersizliği olabilir.

    Tabii ki, mal sahibi, ikametgahında geçici olarak kalmanızı yasallaştırma isteğini ifade etmemişse, o zaman kayıt yaptıramazsınız. Bunun istisnası, reşit olmayan çocuğunuzu kaydınızın yapıldığı yerde kaydettirmenizdir. Bu durumda malikin muvafakati aranmaz.

    Ancak, geçici kayıtla ilgili sorun yalnızca mal sahibinin, kayıt için belgeleri almaktan sorumlu çalışanları sizinle ziyaret etme arzusunun olmamasıysa, o zaman düzenlemeler, mal sahibinin varlığı olmadan geçici kayıt alma olasılığını sağlar.

    Taşınmanın temeli bir iş sözleşmesiyse, diğer belgelerin eklenmesiyle (pasaportunuzun bir kopyası, tamamlanmış bir başvuru) posta yoluyla noterlik sözleşmesi gönderebilirsiniz. Böyle bir durumda belgeleri kabul etmekle yükümlü kişilerin bu sözleşmenin bir örneğini tasdik etme zorunluluğu yoktur ve bina sahibi başvuruya imzasını atmaz.

    Yalnızca sözleşmenin basit bir yazılı biçimde sunulması mümkün ise, sorumlu kişiler, malikin ve başvuruda kayıtlı olan kişinin imzasını tasdik etmekle yükümlüdür. Bu durumda, sahibinin varlığı vazgeçilmezdir.

    İkamet yerindeki tescil belgesi posta yoluyla da alınabilir.

    Mal sahibinin geçici kayıt alırken hazır bulunması gerekmese de, yeni kiracılar hakkında bilgi sahibi olmamasını ummaya değmez. Tamamlanan kayıt işlemlerinin ardından, FMS yetkilileri, kendisine yaşam alanına kayıtlı kişi hakkında bir bildirim gönderecektir.

    8. İpucu: Araba satmak için 3 kişilik gelir vergisi formu nasıl doldurulur?

    Üç yıldan uzun süredir sahibi olduğunuz bir arabayı sattıysanız, daha fazlasını okumayın: 2011'den itibaren otomatik olarak emlak vergisi indirimine hak kazanırsınız. Bu, beyanname vermeniz gerekmediği anlamına gelir. Ancak daha az süre sahip olduysanız, gerekli evrakları hazırlamanız gerekecektir. Bunu yapmanın en kolay yolu Declaration programıdır.

    İhtiyacın olacak

    • - bilgisayar;
    • - İnternet girişi;
    • - Rusya Federasyonu Federal Vergi Servisi'nin SNIVS'sinden "Beyanname" programı;
    • - araba satış sözleşmesi;
    • - diğer gelirlerinizi ve bunlardan geçen yıl için kişisel gelir vergisi ödemenizi onaylayan belgeler.

    Talimat

    Programın en son sürümünü Rusya Federal Vergi Servisi Ana Araştırma Merkezi'nin (GNIVTS FTS) web sitesinden indirebilirsiniz. yayılıyor

    Üyeliğe dayalı bir site oluşturmak ilk başta göz korkutucu bir görev gibi görünüyor. Bunu kendi başınıza yapmak isteyip PHP becerilerinizi kullanarak nasıl bir araya getireceğinizi düşünmeye başladığınızda vazgeçtiyseniz, bu makale tam size göre. Parolayla korunan güvenli bir üye alanına sahip, üyelik tabanlı bir site oluşturmanın her aşamasında size yol göstereceğiz.

    Tüm süreç iki büyük bölümden oluşur: kullanıcı kaydı ve kullanıcı kimlik doğrulaması. İlk bölümde, kayıt formunun oluşturulmasını ve verilerin bir MySQL veritabanında saklanmasını ele alacağız. İkinci bölümde ise login formunu oluşturacağız ve bunu kullanıcıların güvenli alana erişmesini sağlamak için kullanacağız.

    kodu indir

    Tüm kaynağı indirebilirsiniz için kod Aşağıdaki bağlantıdan kayıt/giriş sistemi:

    Yapılandırma ve Yükleme
    ReadMe dosyası ayrıntılı talimatlar içerir.

    kaynak\include\membersite_config.php bir metin düzenleyicide dosyalayın ve yapılandırmayı güncelleyin. (Veritabanı girişi, web sitenizin adı, e-posta adresiniz vb.).

    Tüm dizin içeriğini yükleyin. Formu göndererek register.php'yi test edin.

    kayıt formu

    oluşturmak için Kullanıcı hesabı, kullanıcıdan minimum miktarda bilgi toplamamız gerekiyor. Adına, e-posta adresine ve istediği kullanıcı adı ile şifresine ihtiyacımız var. Tabii ki, bu noktada daha fazla bilgi isteyebiliriz, ancak uzun bir form her zaman bir sapmadır. O halde kendimizi sadece bu alanlarla sınırlayalım.

    İşte kayıt formu:

    Tam Adınızı Kaydedin*: E-posta Adresi*: KullanıcıAdı*: Parola*:

    Böylece ad, e-posta ve parola için metin alanlarımız var. Daha iyi kullanılabilirlik için kullandığımızı unutmayın.

    form doğrulama

    Bu noktada, bir tür doğrulama kodu koymak iyi bir fikirdir, bu nedenle kullanıcı hesabını oluşturmak için gereken tüm verilere sahip olduğumuzdan emin oluruz. Adın, e-postanın ve şifrenin doldurulup doldurulmadığını ve e-postanın uygun biçimde olup olmadığını kontrol etmemiz gerekiyor.

    Form gönderimini işleme

    Şimdi gönderilen form verilerini işlememiz gerekiyor.

    Dizi şu şekildedir (indirilen kaynaktaki fg_membersite.php dosyasına bakın):

    RegisterUser() ( if(!isset($_POST["gönderildi"])) ( false döndür; ) $formvars = dizi(); if(!$this->ValidateRegistrationSubmission()) ( false döndür; ) $bu- >CollectRegistrationSubmission($formvars); if(!$this->SaveToDatabase($formvars)) ( false döndürür; ) if(!$this->SendUserConfirmationEmail($formvars)) ( false döndürür; ) $this->SendAdminIntimationEmail($ formvars); true döndür; )

    İlk olarak, form gönderimini doğrularız. Ardından, form gönderme verilerini toplar ve 'sterilize ederiz' (bunu her zaman e-posta göndermeden, veritabanına kaydetmeden vb. önce yapın). Form gönderimi daha sonra veritabanı tablosuna kaydedilir. Onay isteyen kullanıcıya bir e-posta göndeririz. Daha sonra yöneticiye bir kullanıcının kayıt yaptırdığını bildiririz.

    Verileri veritabanına kaydetme

    Artık tüm verileri topladığımıza göre, onu veritabanına kaydetmemiz gerekiyor.
    Form gönderimini veritabanına nasıl kaydettiğimiz aşağıda açıklanmıştır.

    function SaveToDatabase(&$formvars) ( if(!$this->DBLogin()) ( $this->HandleError("Veritabanı oturumu açılamadı!"); return false; ) if(!$this->Ensuretable()) ( false döndür; ) if(!$this->IsFieldUnique($formvars,"email")) ( $this->HandleError("Bu e-posta zaten kayıtlı"); false döndür; ) if(!$this->IsFieldUnique( $formvars,"username")) ( $this->HandleError("Bu KullanıcıAdı zaten kullanılıyor. Lütfen başka bir kullanıcı adı deneyin"); false döndürün) if(!$this->InsertIntoDB($formvars)) ( $this- >HandleError("Veritabanına ekleme başarısız!"); false döndür; ) true döndür; )

    Memberite_config.php dosyasında Veritabanı oturum açma ayrıntılarını yapılandırdığınızı unutmayın. Çoğu durumda, veritabanı ana bilgisayarı için “localhost” kullanabilirsiniz.
    Giriş yaptıktan sonra tablonun var olduğundan emin oluyoruz.(Yoksa script gerekli tabloyu oluşturacaktır).
    Ardından, kullanıcı adının ve e-postanın benzersiz olduğundan emin oluruz. Benzersiz değilse, hatayı kullanıcıya geri döndürürüz.

    Veritabanı tablo yapısı

    Bu tablo yapısıdır. fg_membersite.php dosyasındaki CreateTable() işlevi tabloyu oluşturur. İşte kod:

    function CreateTable() ( $qry = "Tablo Oluştur $this->tablename (". "id_user INT NOT NULL AUTO_INCREMENT ,". "name VARCHAR(128) NOT NULL ,". "email VARCHAR(64) NOT NULL ,". "phone_number VARCHAR(16) NOT NULL ,". "kullanıcı adı VARCHAR(16) NOT NULL ,". "şifre VARCHAR(32) NOT NULL ,". "onay kodu VARCHAR(32) ,". "PRİMER ANAHTAR (id_user)". ")"; if(!mysql_query($qry,$this->connection)) ( $this->HandleDBError("\nquery\n $qry tablosu oluşturulurken hata oluştu"); false döndür; ) true döndür; )

    id_user alanı, kullanıcının benzersiz kimliğini içerecektir ve aynı zamanda tablonun birincil anahtarıdır. Parola alanı için 32 karaktere izin verdiğimize dikkat edin. Bunu, ek bir güvenlik önlemi olarak, parolayı MD5 kullanılarak şifrelenmiş veritabanında saklayacağımız için yapıyoruz. MD5 tek yönlü bir şifreleme yöntemi olduğundan, kullanıcının unutması durumunda parolayı kurtaramayacağımızı lütfen unutmayın.

    Kaydın tabloya eklenmesi

    İşte veritabanına veri eklemek için kullandığımız kod. Tüm verilerimizi $formvars dizisinde bulunduracağız.

    function InsertIntoDB(&$formvars) ( $confirmcode = $this->MakeConfirmationMd5($formvars["email"]); $insert_query = ".$this->tabloadına ekleyin."(isim, e-posta, kullanıcı adı, şifre, onay kodu) değerleri ("" . $this->SanitizeForSQL($formvars["name"]) . "", "" . $this->SanitizeForSQL($formvars["email"]) . "", "" . $ this->SanitizeForSQL($formvars["username"]) . "", "" . md5($formvars["password"]) . "", "" . $confirmcode . """; if(! mysql_query( $insert_query ,$this->connection)) ( $this->HandleDBError("Tabloya veri ekleme hatası\nquery:$insert_query"); false döndür; ) true döndür; )

    Parolayı veritabanına eklemeden önce şifrelemek için PHP md5() işlevini kullandığımıza dikkat edin.
    Ayrıca, kullanıcının e-posta adresinden benzersiz onay kodu oluşturuyoruz.

    e-posta gönderme

    Artık kaydımız veri tabanımızda olduğuna göre, kullanıcıya bir onay e-postası göndereceğiz. Kullanıcı, kayıt işlemini tamamlamak için onay e-postasındaki bir bağlantıya tıklamalıdır.

    function SendUserConfirmationEmail(&$formvars) ( $mailer = new PHPMailer(); $mailer->CharSet = "utf-8"; $mailer->AddAddress($formvars["email"],$formvars["ad"]) ; $mailer->Subject = "".$this->sitename; $mailer->From = $this->GetFromAddress(); $confirmcode = urlencode($this->MakeConfirmationMd5($formvars["email" ile kaydınız) ])); $confirm_url = $this->GetAbsoluteURLFolder()."/confirmreg.php?code=".$confirmcode; $mailer->Body ="Merhaba ".$formvars["ad"]."\r\ n\r\n". "".$this->sitename."\r\n" ile kaydınız için teşekkür ederiz. "Kaydınızı onaylamak için lütfen aşağıdaki bağlantıyı tıklayın.\r\n". "$confirm_url\r \n". "\r\n". "Saygılarımızla,\r\n". "Webmaster\r\n". $this->sitename; if(!$mailer->Send()) ( $this-> HandleError("Kayıt onay e-postası gönderilemedi."); false döndür; ) true döndür; )

    güncellemeler

    9 Ocak 2012
    Parolayı Sıfırla/Parolayı Değiştir özellikleri eklendi
    Kod artık GitHub'da paylaşılıyor.

    Tekrar hoşgeldiniz!

    Lisans


    Kod, LGPL lisansı altında paylaşılır. Ticari veya ticari olmayan web sitelerinde özgürce kullanabilirsiniz.

    Alakalı Gönderi Yok.

    Bu giriş için yorumlar kapalı.

    Merhaba! Şimdi PHP + MySQL kullanarak sitedeki en basit kaydı uygulamaya çalışacağız. Bunun için bilgisayarınızda Apache kurulu olmalıdır. Komut dosyamızın nasıl çalıştığı aşağıda gösterilmiştir.

    1. Veritabanında users tablosunu oluşturarak başlayalım. Kullanıcı verilerini (giriş ve şifre) içerecektir. Gelelim phpmyadmin'e (eğer PC'nizde bir veritabanı oluşturuyorsanız) http://localhost/phpmyadmin/). Bir tablo oluşturun users , 3 alanı olacaktır.

    Ben mysql veritabanında oluşturuyorum, siz başka bir veritabanında oluşturabilirsiniz. Ardından, değerleri şekildeki gibi ayarlayın:

    2. Bu tabloya bir bağlantı gereklidir. Bir bd.php dosyası oluşturalım. Bu içerik:

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

    bd.php dosyasını kaydedin.
    Harika! Veritabanında bir tablomuz var, onunla bir bağlantımız var. Artık kullanıcıların verilerini bırakacakları bir sayfa oluşturmaya başlayabilirsiniz.

    3. İçeriğe sahip bir reg.php dosyası oluşturun (tüm yorumlar içeride):



    Kayıt


    Kayıt


    Kullanıcı girişin:




    Şifreniz:








    4. Veritabanına veri girecek ve kullanıcıyı kaydedecek bir dosya oluşturun. save_user.php (yorumlar içeride):

    5. Artık kullanıcılarımız kayıt olabilir! Ardından, önceden kayıtlı kullanıcılar için siteye girmek için bir "kapı" yapmanız gerekir. index.php (yorumlar içeride):




    Ana Sayfa


    Ana Sayfa


    Kullanıcı girişin:


    Şifreniz:






    Kayıt olmak



    Tamam, şimdi her şey bitti! Belki ders sıkıcı ama çok faydalı. Burada yalnızca kayıt fikri gösterilmektedir, daha da geliştirebilirsiniz: güvenlik, tasarım, veri alanları ekleyin, avatarları yükleyin, hesaptan çıkış yapın (bunun için değişkenleri unset işleviyle oturumdan silin) ​​ve yakında. İyi şanlar!

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

    Bir kayıt sistemi oluşturma süreci oldukça fazla iştir. E-posta adreslerinin geçerliliğini iki kez kontrol eden, onay e-postaları gönderen, parola kurtarma sunan, parolaları güvenli bir yerde saklayan, giriş formlarını doğrulayan ve daha fazlasını yapan bir kod yazmanız gerekir. Tüm bunları yaptığınızda bile, kullanıcılar kayıt olma konusunda isteksiz olacaktır, çünkü en asgari kayıt bile onların faaliyetlerini gerektirir.

    Bugünün eğitiminde, herhangi bir parolaya ihtiyaç duymadığınız basit bir oturum açma sistemi geliştireceğiz! Sonuç olarak, kolayca değiştirilebilen veya mevcut bir PHP sitesine entegre edilebilen bir sistem elde edeceğiz. Eğer ilgileniyorsanız, okumaya devam edin.

    PHP

    Artık PHP koduna geçmeye hazırız. Kayıt sisteminin ana işlevselliği, aşağıda görebileceğiniz User sınıfı tarafından sağlanır. Sınıf, minimalist bir veritabanı kitaplığı olan () öğesini kullanır. User sınıfı, veritabanlarına erişmekten, oturum açmak için belirteçler oluşturmaktan ve bunları doğrulamaktan sorumludur. PHP tabanlı sitelerinizdeki kayıt sistemine kolayca dahil edilebilecek basit bir arayüz sağlar.

    user.class.php

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

    /**
    * Bir belirteç dizisine göre bir kullanıcı bulun. Yalnızca geçerli belirteçler dikkate alınır
    * düşünce. Bir belirteç, oluşturulduktan sonra 10 dakika süreyle geçerlidir.
    * @param string $token Aranacak belirteç
    * @returnUser
    */

    genel statik işlev findByToken($token)(

    // veritabanında bulun ve zaman damgasının doğru olduğundan emin olun


    ->where("belirteç", $belirteç)
    ->where_raw("token_validity > ŞİMDİ()")
    ->find_one();

    Eğer(!$sonuç)(
    yanlış dönüş;
    }

    Yeni Kullanıcıyı döndür($sonuç);
    }

    /**
    * Giriş yapın veya bir kullanıcı kaydedin.
    * @returnUser
    */

    Genel statik işlev loginOrRegister($email)(

    // Böyle bir kullanıcı zaten varsa, onu döndür

    If(Kullanıcı::var($e-posta))(
    yeni Kullanıcıyı iade et($email);
    }

    // Aksi takdirde, onu oluştur ve döndür

    Geri Kullanıcı::create($email);
    }

    /**
    * Yeni bir kullanıcı oluşturun ve veritabanına kaydedin
    * @param string $email Kullanıcının e-posta adresi
    * @returnUser
    */

    Özel statik işlev oluştur($email)(

    // Veritabanına yeni bir kullanıcı yaz ve geri gönder

    $result = ORM::for_table("reg_users")->create();
    $sonuç->e-posta = $e-posta;
    $sonuç->kaydet();

    Yeni Kullanıcıyı döndür($sonuç);
    }

    /**
    * Veritabanında böyle bir kullanıcının olup olmadığını kontrol edin ve bir boole döndürün.
    * @param string $email Kullanıcının e-posta adresi
    * @dönüş boole
    */

    Genel statik işlev var($email)(

    // Kullanıcı veritabanında var mı?
    $result = ORM::for_table("reg_users")
    ->where("e-posta", $e-posta)
    ->sayım();

    $ sonuç == 1;
    }

    /**
    * Yeni bir kullanıcı nesnesi oluşturun
    * @param $param ORM örneği, kimlik, e-posta veya boş
    * @returnUser
    */

    Genel işlev __construct($param = null)(

    If($param ORM örneği)(

    // Bir ORM örneği iletildi
    $this->orm = $param;
    }
    başka if(is_string($param)()(

    // Bir e-posta iletildi
    $bu->
    ->where("email", $param)
    ->find_one();
    }
    başka(

    If(is_numeric($param)(
    // Bir kullanıcı kimliği parametre olarak iletildi
    $id = $param;
    }
    else if(isset($_SESSION["loginid"]))(

    // Hiçbir kullanıcı kimliği iletilmedi, oturuma bakın
    $id = $_SESSION["loginid"];
    }

    $this->orm = ORM::for_table("reg_users")
    ->where("id", $id)
    ->find_one();
    }

    /**
    * Yeni bir SHA1 oturum açma belirteci oluşturur, veritabanına yazar ve döndürür.
    * @dönüş dizesi
    */

    Genel işlev createToken()(
    // oturum açmış kullanıcı için bir belirteç oluştur. Veritabanına kaydedin.

    $token = sha1($this->email.time().rand(0, 1000000));

    // Belirteci veritabanına kaydedin,
    // ve sadece sonraki 10 dakika için geçerli olarak işaretle

    $this->orm->set("token", $token);
    $this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")");
    $this->orm->save();

    $ jetonunu döndür;
    }

    /**
    * Bu kullanıcıyı oturum açın
    * @geri dönüş geçersiz
    */

    genel işlev girişi()(

    // Kullanıcıyı oturum açmış olarak işaretle
    $_SESSION["loginid"] = $this->orm->id;

    // last_login veritabanı alanını güncelleyin
    $this->orm->set_expr("last_login", "NOW()");
    $this->orm->save();
    }

    /**
    * Oturumu yok edin ve kullanıcının oturumunu kapatın.
    * @geri dönüş geçersiz
    */

    genel işlev oturumu kapatma()(
    $_OTURUM = dizi();
    unset($_OTURUM);
    }

    /**
    * Kullanıcının oturum açıp açmadığını kontrol edin.
    * @dönüş boole
    */

    Genel işlev logIn()(
    dönüş isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id;
    }

    /**
    * Kullanıcının yönetici olup olmadığını kontrol edin
    * @dönüş boole
    */

    Genel işlev isAdmin()(
    $this->rank() == "yönetici";
    }

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

    genel işlev sıralaması()(
    if($this->orm->rank == 1)(
    "yönetici" döndürür;
    }

    "Normal" döndürür;
    }

    /**
    * Özel öğelere erişmek için sihirli yöntem
    * Kullanıcı nesnesinin özellikleri olarak $orm örneği
    * @param string $key Erişilen özelliğin adı
    * @return karışık
    */

    Genel işlev __get($key)(
    if(isset($this->orm->$key)(
    $this->orm->$key'i döndür;
    }

    boş dönüş;
    }
    }
    Belirteçler, algoritma kullanılarak oluşturulur ve veritabanında saklanır. Token_validity sütunundaki değeri 10 dakikaya ayarlamak için MySQL'den kullanıyoruz. Bir jetonu doğrularken, motora bir jetona ihtiyacımız olduğunu, token_validity alanının süresinin henüz dolmadığını söyleriz. Böylece, belirtecin geçerli olacağı süreyi sınırlıyoruz.

    Kullanıcı nesnesinin özelliklerine erişmek için belgenin sonunda sihirli __get() yöntemini kullandığımızı unutmayın. Bu, veritabanında depolanan verilere özellikler olarak erişmemizi sağlar: $user->email, $user->token. Örnek olarak aşağıdaki kod parçacığında bu sınıfı nasıl kullanabileceğimizi görelim:


    Gerekli işlevselliği saklayan başka bir dosya da functions.php'dir. Orada, kodun geri kalanını daha düzenli tutmamıza izin veren bazı yardımcı fonksiyonlarımız var.

    işlevler.php

    İşlev send_email($kimden, $kime, $konu, $mesaj)(

    // E-posta göndermek için yardımcı işlev

    $headers = "MIME Sürümü: 1.0" . "\r\n";
    $headers .= "İçerik türü: metin/düz; charset=utf-8" . "\r\n";
    $headers .= "Kimden: ".$kimden . "\r\n";

    dönüş postası($kime, $konu, $mesaj, $başlıklar);
    }

    işlev get_page_url()(

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

    $url = "http".(empty($_SERVER["HTTPS"])?"":"s")."://".$_SERVER["SERVER_NAME"];

    If(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")(
    $url.= $_SERVER["REQUEST_URI"];
    }
    başka(
    $url.= $_SERVER["PATH_INFO"];
    }

    $url'yi döndür;
    }

    işlev rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)(

    // Bu IP adresine göre son bir saatteki giriş denemelerinin sayısı

    $count_hour = ORM::for_table("reg_login_attempt")
    ->
    ->where_raw("ts > SUBTIME(NOW(),"1:00")")
    ->sayım();

    // Bu IP adresine göre son 10 dakikadaki giriş denemelerinin sayısı

    $count_10_min = ORM::for_table("reg_login_attempt")
    ->where("ip", sprintf("%u", ip2long($ip)))
    ->where_raw("ts > SUBTIME(NOW(),"0:10")")
    ->sayım();

    If($count_hour > $limit_hour || $count_10_min > $limit_10_min)(
    throw new İstisna("Çok fazla oturum açma denemesi!");
    }
    }

    function rate_limit_tick($ip, $email)(

    // Oturum açma girişimi tablosunda yeni bir kayıt oluşturun

    $login_attempt = ORM::for_table("reg_login_attempt")->create();

    $login_attempt->e-posta = $e-posta;
    $login_attempt->ip = sprintf("%u", ip2long($ip));

    $login_attempt->save();
    }

    işlev yönlendirmesi($url)(
    başlık("Konum: $url");
    çıkış;
    }
    rate_limit ve rate_limit_tick işlevleri, belirli bir süre için yetkilendirme girişimi sayısını sınırlamamıza izin verir. Yetkilendirme girişimleri reg_login_attempt veritabanına kaydedilir. Bu işlevler, aşağıdaki kod parçacığında da görebileceğiniz gibi, oturum açma formu gönderildiğinde çalışır.

    Aşağıdaki kod index.php'den alınmıştır ve giriş formunu doğrulamaktan sorumludur. asset/js/script.js'de gördüğümüz jQuery kodu tarafından yönetilen bir JSON yanıtı döndürür.

    index.php

    If(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))(

    // Bir JSON başlığı çıkar

    Header("İçerik türü: uygulama/json");

    // E-posta adresi geçerli mi?

    If(!isset($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)(
    throw new İstisna("Lütfen geçerli bir e-posta giriniz.");
    }

    // Kişi yukarıdaysa bu bir istisna atar
    // izin verilen oturum açma girişimi sınırları (daha fazlası için functions.php'ye bakın):
    rate_limit($_SERVER["REMOTE_ADDR"]);

    // Bu oturum açma denemesini kaydet
    rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["email"]);

    // Mesajı kullanıcıya gönder

    $mesaj = "";
    $email = $_POST["email"];
    $subject = "Giriş Bağlantınız";

    Eğer(!Kullanıcı::varsa($e-posta))(
    $subject = "Kayıt Olduğunuz İçin Teşekkür Ederiz!";
    $message = "Sitemize kayıt olduğunuz için teşekkür ederiz!\n\n";
    }

    // Oturum açmaya veya kişiyi kaydetmeye çalışın
    $user = User::loginOrRegister($_POST["email"]);

    $message.= "Bu URL'den giriş yapabilirsiniz:\n";
    $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n";

    $message.= "Bağlantı 10 dakika sonra otomatik olarak kapanacaktır.";

    $result = send_email($fromEmail, $_POST["email"], $konu, $mesaj);

    Eğer(!$sonuç)(
    throw new İstisna("E-postanız gönderilirken bir hata oluştu. Lütfen tekrar deneyiniz.");
    }

    Die(json_encode(dizi(
    "message" => "Teşekkürler! Gelen kutunuza bir bağlantı gönderdik. Spam klasörünüzü de kontrol edin."
    )));
    }
    }
    catch(İstisna $e)(

    Die(json_encode(dizi(
    "hata"=>1,
    "mesaj" => $e->getMessage()
    )));
    }
    Yetkilendirme veya kayıt başarılı olduktan sonra, yukarıdaki kod bir kişiye yetkilendirme bağlantısı içeren bir e-posta gönderir. Belirteç (belirteç), oluşturulan URL nedeniyle $_GET "tkn" değişkeni olarak kullanılabilir hale gelir.

    index.php

    If(isset($_GET["tkn"]))(

    // Bu geçerli bir giriş belirteci mi?
    $user = User::findByToken($_GET["tkn"]);

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

    $user->login();
    yönlendirme ("korumalı.php");
    }

    // Geçersiz belirteç. Oturum açma formuna geri yönlendirin.
    yönlendirme("index.php");
    }
    $user->login() komutunu çalıştırmak, oturum için gerekli değişkenleri yaratarak kullanıcının sonraki oturumlarda oturumunun açık kalmasına olanak tanır.

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

    index.php

    If(isset($_GET["çıkış"]))(

    $kullanıcı = yeni Kullanıcı();

    If($user->loggedIn())(
    $user->logout();
    }

    yönlendirme("index.php");
    }
    Kodun sonunda, kullanıcıyı tekrar index.php'ye yönlendiriyoruz, böylece URL'deki ?logout=1 parametresi hariç tutuluyor.

    index.php dosyamızın da korumaya ihtiyacı olacak - zaten oturum açmış kullanıcıların formu görmesini istemiyoruz. Bunu yapmak için $user->loggedIn() yöntemini kullanıyoruz:

    index.php

    $kullanıcı = yeni Kullanıcı();

    if($user->loggedIn())(
    yönlendirme ("korumalı.php");
    }
    Son olarak, sitenizdeki bir sayfayı nasıl güvenli hale getirebileceğinizi ve onu yalnızca siz oturum açtıktan sonra kullanılabilir hale getirebileceğinizi görelim:

    korumalı.php

    // Sitenizdeki herhangi bir php sayfasını korumak için main.php'yi dahil edin
    // ve yeni bir Kullanıcı nesnesi oluşturun. Bu kadar basit!

    require_once "içerir/main.php";

    $kullanıcı = yeni Kullanıcı();

    if(!$user->loggedIn())(
    yönlendirme("index.php");
    }
    Bu kontrolden sonra, kullanıcının başarıyla oturum açtığından emin olabilirsiniz. Veritabanında depolanan verilere $user nesnesinin özellikleri olarak da erişebileceksiniz. Kullanıcının e-postasını ve rütbesini görüntülemek için aşağıdaki kodu kullanın:

    echo "E-posta adresiniz: ".$user->email;
    echo "Rütbeniz: ".$user->rank();
    Burada rank() bir yöntemdir çünkü bir veritabanındaki rank sütunu genellikle sayılar içerir (normal kullanıcılar için 0 ve yöneticiler için 1) ve tüm bunları bu yöntem kullanılarak uygulanan rank adlarına dönüştürmemiz gerekir. Normal bir kullanıcıyı yöneticiye dönüştürmek için, kullanıcı girişini phpmyadmin'de (veya başka bir veritabanı programında) düzenlemeniz yeterlidir. Bir yönetici olarak, kullanıcıya herhangi bir özel yetenek verilmeyecektir. Yöneticilere hangi hakları vereceğinizi kendiniz seçme hakkına sahipsiniz.

    Hazır!

    Bunun üzerine basit kayıt sistemimiz hazır! Mevcut bir PHP sitesinde kullanabilir veya kendi ihtiyaçlarınıza göre yükseltebilirsiniz.

    Reg.ru: etki alanları ve barındırma

    Rusya'daki en büyük kayıt şirketi ve barındırma sağlayıcısı.

    Hizmette 2 milyondan fazla alan adı.

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

    Dünya çapında 700 binden fazla müşteri şimdiden seçimini yaptı.

    * Kaydırmayı duraklatmak için fareyle üzerine gelin.

    İleri geri

    PHP ve MySQL'de basit bir kullanıcı kayıt sistemi oluşturma

    Bir kayıt sistemi oluşturmak çok iştir. E-posta adreslerini doğrulayan, bir kayıt onay e-postası gönderen, form alanlarının geri kalanını doğrulayan ve çok daha fazlasını yapan bir kod yazmanız gerekir.

    Ve tüm bunları yazdıktan sonra bile, kullanıcılar kaydolma konusunda isteksiz olacak çünkü. onların tarafında biraz çaba gerektirir.

    Bu eğitimde, çok basit sistem hiç şifre gerektirmeyen veya saklamayan kayıt! Sonuç, zaten var olan bir PHP sitesine değiştirmek ve eklemek için kolay olacaktır. Nasıl çalıştığını öğrenmek ister misiniz? Alttarafı oku.



    İşte süper basit sistemimizin nasıl çalışacağı:

    Yetkilendirme formu ile kaydı birleştireceğiz. Bu formda bir e-posta adresi girmek için bir alan ve bir kayıt düğmesi olacaktır;
    - Alanı bir e-posta adresi ile doldururken, kayıt düğmesine tıklanarak yeni bir kullanıcı hakkında bir kayıt oluşturulur, ancak yalnızca girilen e-posta adresi veritabanında bulunamadıysa.

    Bundan sonra, kullanıcı tarafından belirtilen postaya 10 dakika boyunca geçerli olacak bir bağlantı biçiminde gönderilen belirli bir rastgele benzersiz karakter kümesi (belirteç) oluşturulur;
    - Kullanıcı, bağlantıya tıklayarak web sitemize gider. Sistem, jetonun varlığını belirler ve kullanıcıya yetki verir;

    Bu yaklaşımın avantajları:

    Parolaları saklamaya ve alanları doğrulamaya gerek yok;
    - Şifre kurtarma, gizli sorular vb. gerek yok;
    - Bir kullanıcının kaydolduğu/oturum açtığı andan itibaren, bu kullanıcının erişim bölgenizde olacağından (e-posta adresinin doğru olduğundan) her zaman emin olabilirsiniz;
    - İnanılmaz derecede basit kayıt işlemi;

    Kusurlar:

    Kullanıcı hesabı güvenliği. Birinin kullanıcının postasına erişimi varsa, oturum açabilir.
    - E-posta güvenli değildir ve ele geçirilebilir. Bu sorunun, parolanın unutulması ve geri yüklenmesi gerektiğinde veya veri aktarımı (oturum açma adı / parola) için HTTPS kullanmayan herhangi bir yetkilendirme sisteminde de geçerli olduğunu unutmayın;
    - Posta sunucusunu gerektiği gibi kurduğunuz sürece, yetkilendirme bağlantılarına sahip iletilerin istenmeyen postaya düşme olasılığı vardır;

    Sistemimizin avantaj ve dezavantajlarını karşılaştırdığımızda sistemin kullanılabilirliğinin yüksek (son kullanıcı için maksimum kolaylık) ve aynı zamanda güvenlik göstergesinin düşük olduğunu söyleyebiliriz.

    Bu nedenle, önemli bilgilerle çalışmayan forumlara ve hizmetlere kayıt için kullanılması önerilir.

    Bu sistem nasıl kullanılır?

    Sistemi sadece sitenizdeki kullanıcıları yetkilendirmek için kullanmanız gerekiyorsa ve bu dersi bölmek istemiyorsanız, yapmanız gerekenler:

    Derse ekli kaynak dosyaları indirmeniz gerekmektedir.
    - Tables.sql dosyasını arşivden bulun ve phpMyAdmin'deki import seçeneğini kullanarak veritabanınıza import edin. Alternatif yol: bu dosyayı bir metin düzenleyiciyle açın, SQL sorgusunu kopyalayın ve çalıştırın;
    - include/main.php dosyasını açın ve veritabanınıza bağlanmak için ayarları doldurun (veritabanına bağlanmak için kullanıcı ve parolanın yanı sıra veritabanının ana bilgisayarını ve adını belirtin). Aynı dosyada, sistem tarafından gönderilen mesajlar için orijinal adres olarak kullanılacak bir e-posta adresi de belirtmeniz gerekir. Bazı toplantı sahipleri, forma gerçek bir e-posta girilene kadar giden e-postaları engeller. e-posta adresi, ana bilgisayar kontrol panelinden oluşturulmuş olduğundan, gerçek adresi girin;
    - Tüm index.php ,protected.php dosyalarını ve varlıklarını ve içerdiği klasörleri FTP yoluyla sunucunuza yükleyin;
    - Yetkilendirme formu görüntülemek istediğiniz her PHP sayfasına aşağıdaki kodu ekleyin;

    Require_once "içerir/main.php"; $kullanıcı = yeni Kullanıcı(); if(!$user->loggedIn())( yönlendirme("index.php"); )
    - Hazır!

    Her şeyin nasıl çalıştığını merak edenler için aşağıyı okuyun!

    İlk adım, yetkilendirme formu için HTM kodunu yazmaktır. Bu kod index.php dosyasında bulunur. Bu dosya aynı zamanda form verilerini ve diğerlerini işleyen PHP kodunu da içerir. kullanışlı özellikler yetkilendirme sistemleri. Aşağıdaki PHP kod incelemesi bölümünde bununla ilgili daha fazla bilgi edinebilirsiniz.

    index.php

    Öğretici: PHP ve MySQL ile Süper Basit Kayıt Sistemi Oturum Açma veya Kayıt Olma

    Yukarıya e-posta adresinizi girin, gönderelim
    giriş linki

    Giriş Yap/Kayıt Ol

    Head bölümünde (ve etiketlerinin arasına) ana stilleri ekledim (bu eğitimde ele alınmadıkları için bunları kendiniz görebilirsiniz. asset/css/style.css klasörü). Kapanış etiketinden önce aşağıda yazıp analiz edeceğimiz jQuery kütüphanesini ve script.js dosyasını ekledim.


    JavaScript

    jQuery, "Kaydol/Giriş Yap" düğmesinin durumunu bir işlevle takip eder e.preventDefault() ve AJAX istekleri gönderir. Sunucunun yanıtına bağlı olarak, belirli bir mesajı görüntüler ve diğer eylemleri belirler /

    varlıklar/js/script.js

    $(function()( var form = $("#login-register"); form.on("gönder", function(e)( if(form.is(".loading, .loggedIn"))( false döndür) ; ) var email = form.find("input").val(), messageHolder = form.find("span"); e.preventDefault(); $.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("yükleniyor"); )); $(document).ajaxComplete(function()( form. removeClass("yükleniyor"); )); ));

    AJAX isteğinin mevcut durumunu görüntülemek için forma eklendi (bu, yöntemler sayesinde mümkün oldu) ajaxStart()) Ve ajaxComplete(), dosyanın sonuna doğru bulabilirsiniz).

    Bu sınıf, dönen animasyonlu bir gif dosyasını gösterir (bize isteğin işlenmekte olduğunu ima ediyormuş gibi) ve ayrıca formun yeniden gönderilmesini önleyen bir bayrak görevi görür (kayıt düğmesi zaten bir kez tıklandığında). .loggedIn sınıfı, e-posta gönderildiğinde ayarlanan başka bir bayraktır. Bu bayrak, formda yapılacak diğer işlemleri anında engeller.

    Veritabanı Şeması

    İnanılmaz basit kayıt sistemimiz 2 MySQL tablosu kullanır (SQL kodu, tables.sql dosyasındadır). İlki, kullanıcı hesaplarıyla ilgili verileri depolar. İkincisi, oturum açma denemelerinin sayısı hakkında bilgi depolar.


    Kullanıcı tablosu şeması.

    Sistem, şemada görülebileceği gibi parola kullanmaz. Üzerinde, token_validity sütununa bitişik belirteçlerle belirteç sütununu da görebilirsiniz. Belirteç, kullanıcı sisteme bağlanır bağlanmaz ayarlanır, e-postasını bir mesaj gönderecek şekilde ayarlar (bir sonraki blokta bununla ilgili biraz daha fazla bilgi). token_validity sütunu, zamanı 10 dakika sonraya ayarlar ve bundan sonra belirteç artık geçerli değildir.


    Yetkilendirme girişimlerinin sayısını sayan tablo şeması.

    Her iki tabloda da IP adresi, bir tamsayı alanında ip2long işlevi kullanılarak işlenmiş bir biçimde saklanır.

    Şimdi biraz PHP kodu yazabiliriz. Sistemin ana işlevi aşağıda görebileceğiniz User.class.php sınıfına atanmıştır.

    Bu sınıf aktif olarak idorm (docs) kullanır, bu kütüphaneler veritabanlarıyla çalışmak için gerekli minimum araçlardır. Veritabanı erişimini, belirteç oluşturmayı ve doğrulamayı yönetir. PHP kullanıyorsa sitenize bir kayıt sistemi bağlamayı kolaylaştıran basit bir arayüzdür.

    user.class.php

    Class User( // Private ORM case private $orm; /** * Belirteç ile kullanıcı bul. Yalnızca geçerli belirteçler dikkate alınır. Belirteç, oluşturulduğu andan itibaren yalnızca 10 dakika boyunca üretilir * @param string $token .Bu, aradığınız belirteçtir * @return User.Kullanıcı işlevinin değerini döndürür */ public static function findByToken($token)( // belirteci veritabanında bulun ve doğru zaman damgasının ayarlandığından emin olun $ sonuç = ORM::for_table("reg_users") ->where ("token", $token) ->where_raw("token_validity > NOW()") ->find_one();if(!$result)( false döndür; ) yeni Kullanıcı döndür($result); ) /** * Bir kullanıcıyı yetkilendirin veya kaydedin * @param string $email.Kullanıcının e-posta adresi * @return User */ public static function loginOrRegister($email)( // Böyle bir kullanıcı varsa zaten varsa, veritabanında saklanan belirtilen e-posta adresinden Kullanıcı işlevinin değerini döndürür if(User::exists($email))( return new User($email); ) // Aksi takdirde, yeni bir kullanıcı oluşturun. veritabanı ve belirtilen e-postadan User::create işlevinin değerini döndürün return User::create($email ); ) /** * Yeni bir kullanıcı oluşturun ve veritabanına kaydedin * @param string $email. Kullanıcı e-posta adresi * @return User */ özel statik işlev oluştur($email)( // Yeni bir kullanıcı kaydedin ve bu değerlerden Kullanıcı işlevinin sonucunu döndürün $result = ORM::for_table("reg_users")- >create(); $result->email = $email; $result->save(); return new User($result); ) /** * Veritabanında böyle bir kullanıcının var olup olmadığını kontrol edin ve boolean değerini döndürün değişken * @param string $email. Kullanıcı e-posta adresi * @return boolean */ genel statik işlev mevcut($email)( // Kullanıcı veritabanında var mı? $result = ORM::for_table("reg_users") ->where("email", $email ) ->count(); return $result == 1; ) /** * Yeni bir kullanıcı nesnesi oluştur * @param örneği $param ORM , id, email veya 0 * @return User */ public function __construct($param = null) ( if($param ORM örneği)( // ORM kontrolü geçti $this->orm = $param; ) else if(is_string($param))( // E-posta kontrolü geçti $this->orm = ORM:: for_table ("reg_users") ->where("email", $param) ->find_one(); ) else( $id = 0; if(is_numeric($param))( // kullanıcı kimliği $ değerini iletir param değişkeni $id = $param; ) else if(isset($_SESSION["loginid"]))( // Aksi halde oturuma bakın $id = $_SESSION["loginid"]; ) $this->orm = ORM:: for_table( "reg_users") ->where("id", $id) ->find_one(); ) ) /** * Yeni bir SHA1 yetkilendirme belirteci oluşturun, veritabanına yazın ve değerini döndürün * @return string * / public function createToken( )( // Yetkili bir kullanıcı için bir belirteç oluştur ve onu veritabanına kaydet $token = sha1($this->email.time().rand(0, 1000000)); // Jetonu veritabanında saklayın // Ve sadece sonraki 10 dakika için geçerli olarak işaretleyin $this->orm->set("token", $token); $this->orm->set_expr("token_validity", "ADDTIME(NOW(),"0:10")"); $this->orm->save(); $ belirteci döndür; ) /** * Kullanıcıyı yetkilendir * @return void */ public function login()( // Kullanıcıyı oturum açmış olarak işaretle $_SESSION["loginid"] = $this->orm->id; // Değeri güncelle last_login veritabanı alanının $this->orm->set_expr("last_login", "NOW()"); $this->orm->save(); ) /** * Oturumu yok edin ve kullanıcının oturumunu kapatın * @return void */ genel işlev oturum kapatma ()( $_SESSION = dizi(); unset($_SESSION); ) /** * Kullanıcının oturum açıp açmadığını kontrol edin * @return boolean */ genel işlev oturum açmış()( dönüş isset($ this->orm->id) && $_SESSION["loginid"] == $this->orm->id; ) /** * Kullanıcının yönetici olup olmadığını kontrol edin * @return boolean */ public function isAdmin() ( return $this->rank() = = "administrator"; ) /** * Kullanıcı tipini bulun, yönetici veya normal olabilir * @return string */ public function rank()( if($this->orm- >rank == 1)( "administrator "; ) return "regular"; ) /** * Kullanıcının özel bilgilerini *Kullanıcı nesnesinin özellikleri olarak almanızı sağlayan bir yöntem * @param string $key Adı erişim sağlayan özellik * @return mix */ public function __get($key)( if(isset($this->orm->$key))( return $this->orm->$key; ) boş dönüş; ) )

    Jetonlar, SHA1 algoritması kullanılarak üretilir ve veritabanında saklanır. 10 dakikalık belirteç sona erme sınırı ayarlamak için MySQL'in zaman işlevlerini kullanıyorum.

    Belirteç doğrulama prosedürünü geçtiğinde, işleyiciye doğrudan token_validity sütununda saklanan, yalnızca henüz süresi dolmamış belirteçleri düşündüğümüzü söyleriz.

    Lütfen sihirli yöntemi kullandığımı unutmayın. __elde etmek Kullanıcı nesnesinin özelliklerine erişimi engellemek için dosyanın sonundaki docs kitaplığı.

    Bu, $user->email, $user->token ve diğer özellikleri kullanarak veritabanında saklanan bilgilere erişmeyi mümkün kılar.Aşağıdaki kod parçacığında, bu sınıfları örnek olarak nasıl kullanacağımıza bakacağız.


    Korumalı sayfa

    Yararlı ve gerekli işlevleri depolayan başka bir dosya da functions.php dosyasıdır. Burada birkaç sözde yardımcı vardır - diğer dosyalarda daha temiz ve daha okunabilir kodlar oluşturmanıza izin veren yardımcı işlevler.

    fonksiyonlar.php

    send_email($from, $to, $subject, $message)( // E-posta gönderen yardımcı $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "İçerik türü: metin /plain; charset=utf-8" . "\r\n"; $headers .= "Kimden: ".$from . "\r\n"; iade postası($to, $subject, $message, $headers ); ) function get_page_url()( // PHP dosya URL'sini al $url = "http".(empty($_SERVER["HTTPS"])?"":"s")."://".$_SERVER [ "SERVER_NAME"]; if(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")( $url.= $_SERVER["REQUEST_URI"]; ) else( $url. = $_SERVER["PATH_INFO"]; ) return $url; ) function rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)( // Bu IP adresinde son bir saat içinde yapılan oturum açma deneme sayısı $count_hour = ORM: :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"1:00")") ->count(); // Bu IP adresinde son 10 dakikada giriş denemesi sayısı $count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long( $ ip))) ->where_raw("ts > SUBTIME(NOW(),"0:10")") ->count(); if($count_hour > $limit_hour || $count_10_min > $limit_10_min)( throw new İstisna("Çok fazla giriş denemesi!"); ) ) function rate_limit_tick($ip, $email)( // Oluştur Yeni Rekor oturum açma girişimlerinin sayısını sayan bir tabloda $login_attempt = ORM::for_table("reg_login_attempt")->create(); $login_attempt->e-posta = $e-posta; $login_attempt->ip = sprintf("%u", ip2long($ip)); $login_attempt->save(); ) function redirect($url)( header("Konum: $url"); çıkış; )

    Fonksiyonlar oran_sınırı Ve oran_limit_tick ilk denemeden bu yana geçen süre boyunca yetkilendirme denemelerinin sayısını izleyin. Oturum açma girişimi veritabanında reg_login_attempt sütununa kaydedilir. Aşağıdaki kod parçacığından da görebileceğiniz gibi, bu işlevler form verileri işlenirken ve gönderilirken çağrılır.

    Aşağıdaki kod index.php dosyasından alınmıştır ve form gönderimini gerçekleştirir. Bir JSON yanıtı döndürür ve bu yanıt, jQuery tarafından daha önce ele aldığımız asset/js/script.js dosyasında işlenir.

    index.php

    Try( if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))( // Bir JSON başlık başlığı çıktısı al("Content-type: application/json"); // Bu e-posta adresi şu durumlarda geçerli midir? (!isset($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))( throw new Exception("Lütfen geçerli bir e-posta girin."); ) // Kontrol Edin kullanıcının oturum açmasına izin verildi, izin verilen bağlantı sayısını aştı mı? (daha fazla bilgi için functions.php dosyası) rate_limit($_SERVER["REMOTE_ADDR"]); // Bu oturum açma girişimini kaydedin rate_limit_tick($_SERVER["REMOTE_ADDR"] , $ _POST["email"]); // Kullanıcıya bir e-posta gönder $message = ""; $email = $_POST["email"]; $subject = "Giriş Bağlantınız"; if(!User:: var($email) )( $subject = "Kayıt olduğunuz için teşekkür ederiz!"; $message = "Sitemize kaydolduğunuz için teşekkür ederiz!\n\n"; ) // Bir kullanıcıyı yetkilendirme veya kaydetme girişimi $user = Kullanıcı ::loginOrRegister($_POST[ "email"]); $message.= "Bu URL'den giriş yapabilirsiniz:\n"; $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n"; $message.= "Bağlantı 10 dakika sonra otomatik olarak kapanacaktır."; $result = send_email($fromEmail, $_POST["email"], $konu, $mesaj); if(!$result)( throw new İstisna("E-postanız gönderilirken bir hata oluştu. Lütfen tekrar deneyin."); ) die(json_encode(array("message" => "Teşekkürler! Bir bağlantı gönderdik.) Spam klasörünüzü de kontrol edin."))) ) ) catch(Exception $e)( die(json_encode(array("error"=>1, "message" => $e->getMessage( ) ))); )

    Başarılı yetkilendirme/kayıt işleminden sonra, yukarıdaki kod kullanıcıya yetkilendirme için bir bağlantı gönderecektir. Belirteç kullanılabilir hale gelir çünkü yöntem tarafından oluşturulan bağlantıda bir değişken olarak iletilir $_GET işaretleyici tkn ile

    index.php

    If(isset($_GET["tkn"]))( // Bu belirteç yetkilendirme için geçerli mi? $user = User::findByToken($_GET["tkn"]); if($user)( // Evet , Korunan sayfaya yönlendirme $user->login(); yönlendirme("protected.php"); ) // Hayır, belirteç geçerli değil. Oturum açma/kayıt formuna sahip sayfaya yönlendirme yönlendirme ("index.php") php"); )

    $user->login()

    oturum için gerekli değişkenleri oluşturacak, böylece sitenin sonraki sayfalarını görüntüleyen kullanıcı her zaman yetkili kalacaktır.

    Benzer şekilde, sistemden çıkmak için işlevin işlenmesi düzenlenir.

    index.php

    If(isset($_GET["logout"]))( $user = new User(); if($user->loggedIn())( $user->logout(); ) yönlendirme("index.php") ;)

    Kodun sonunda tekrar index.php'ye yönlendirdim, böylece parametre ?çıkış=1 URL tarafından geçirilen gerekli değildir.

    index.php dosyamız ek gerektirir. koruma - sisteme daha önce giriş yapmış kişilerin kayıt formunu tekrar görmelerini istemiyoruz. Bu amaçlar için, yöntemi kullanıyoruz $user->logedIn().

    index.php

    $kullanıcı = yeni Kullanıcı(); if($user->loggedIn())( yönlendirme("korumalı.php"); )

    Son olarak, sitenizin sayfalarını korumanıza ve yalnızca yetkilendirmeden sonra kullanılabilir hale getirmenize izin veren bir kod parçası.

    korumalı.php

    // Sitenizdeki her sayfayı güvenli hale getirmek için bir dosya // main.php ekleyin ve yeni bir Kullanıcı nesnesi oluşturun. İşte bu kadar kolay! require_once "içerir/main.php"; $kullanıcı = yeni Kullanıcı(); if(!$user->loggedIn())( yönlendirme("index.php"); )

    Bu kontrolden sonra, kullanıcının başarıyla yetkilendirildiğinden emin olabilirsiniz. Nesne özelliklerini kullanarak veritabanında saklanan bilgilere de erişebilirsiniz. $ kullanıcı. Kullanıcının e-postasını ve durumunu görüntülemek için şu kodu kullanın:

    echo "E-posta adresiniz: ".$user->email; echo "Rütbeniz: ".$user->rank();

    Yöntem rütbe() burada kullanılır çünkü sayılar genellikle veritabanında saklanır (normal bir kullanıcı için 0, bir yönetici için 1) ve bu verileri ait oldukları durumlara dönüştürmemiz gerekir, bu yöntemin bize yardımcı olduğu şey budur.

    Normal bir kullanıcıyı yönetici yapmak için, kullanıcı girişini phpMyAdmin (veya veritabanlarını yönetmenize izin veren başka bir program) aracılığıyla düzenlemeniz yeterlidir. Yönetici statüsü herhangi bir ayrıcalık sağlamaz, bu örnek sayfa yönetici olduğunuzu gösterecek - hepsi bu.

    Ancak bununla ne yapacağınız - kendi takdirinize bağlı olarak, yöneticiler için belirli ayrıcalıklar ve fırsatlar belirleyen kodu kendiniz yazabilir ve oluşturabilirsiniz.

    Yapılmıştı!

    Bu inanılmaz derecede süper yarı basit şekil ile işimiz bitti! PHP sitelerinizde kullanabilirsiniz, oldukça basit. Ayrıca kendiniz için değiştirebilir ve istediğiniz şekilde yapabilirsiniz.

    Materyal, özellikle site sitesi için Denis Malyshok tarafından hazırlandı.

    Not: PHP ve OOP'de uzmanlaşmada ilerlemek ister misiniz? PHP programlamanın yanı sıra web sitesi oluşturmanın çeşitli yönleriyle ilgili birinci sınıf eğitimlere bakın. ücretsiz kurs OOP kullanarak sıfırdan PHP'de kendi CMS sisteminizi oluşturmak için:

    Malzemeyi beğendiniz ve teşekkür etmek mi istiyorsunuz?
    Sadece arkadaşlarınız ve iş arkadaşlarınızla paylaşın!