PHP Giriş Formu

8 Cevap php
 <form action="form.php" method="post">
    Username: <input type="text" name="user" maxlength="50" value="" />
    Password: <input type="password" name="pass" maxlength="20" value="" />
    <input type="submit" name="Submit" value="Submit" />
    </form>
    <?php
    $Accesstrys = 0;
    if($_POST['Submit'] == "Submit") {
    $Accesstrys++;
    if($Acesstrys == 3)
    {
    $ip = getenv("REMOTE_ADDR");
    $file = fopen("Loginlimit/$ip",'w');
    fwrite($file,"$Accesstrys:$ip");
    }   
    }
    ?>

PHP Giriş Senaryo kod çalışıyor Im, eğer başarısız 10dk Diyelim için dondurmak zorundadır zaman, giriş için size 3 deneyin verir.

kadar yapılabilir, ama bu test ve benim ip ile bir dosya yazma / yaratmadı. im ne yanlış gidiyor

8 Cevap

PHP sunucu-tarafı olduğundan, sizin $Accesstrys değişken her istek üzerine 0'a ayarlanır.

Anahtar oturumları kullanmaktır. $_SESSION["AccessTrys"] yerine $Accesstrys artırılmıyor deneyin

PHP, özellikle web uygulamaları için kullanılan en dinamik dilleri gibi, devletsiz bir ortamda çalışır. Eğer kullanıcılar için session gerekir HTTP istekleri arasında oturum açma girişimleri takip etmek için:

<?php

session_start();
if (!isset($_SESSION['Accesstrys'])) {
  $_SESSION['Accesstrys'] = 0;
}
$_SESSION['Accesstrys']++;
// ... your code goes here ...

Muhtemelen, oturum açma kullanıcı adı / şifre kombinasyonu komut içine kodlanmış varlık değildir, ancak bazı tür bir veritabanından alınan ediliyor. Bu durumda, neden sadece her kullanıcı için yeni bir sütun, dahil değil. Bu kullanıcı sadece her 3 denemede oturum tanımlama siler eğer sorunu çözer.

Veritabanı da ulaştığı zaman sonra 'kilit' hesaplarına 3 girişimleri başarısız sağlayacak.

Eğer gerçekten güvenlik muhtaç düşünüyorsanız, oturumlar ve veritabanı sütun karışımı kullanabilirsiniz, ancak veritabanında oturum verilerini saklamak olabilir. Google bu kullanım set_session_save_handler işlevi yapmak için nasıl örnekler bol vardır.

Sen başkalarının $ Accesstrys her istek üzerine sıfırlanır olacak belirttiğim gibi başlangıç ​​(username tarafından IP adresi veya daha iyi) tarafından deneme sayısını saklamak için bir veritabanı kullanmak isterdim.

Ben bu kadar çok insan deneme sayısını takip etmek oturumları kullanarak önerilen şaşırdım. Temel bir güvenlik açığı var var - oturum açma girişimleri bir hesap kırmak için çalışıyor otomatik bir bot gelen olsaydı, hiçbir tanımlama (veya URL session id) olacak ve erişim girişimleri sizin oturum izleme yararsız olacaktır.

İlk bakışta size $ Accestrys değişkeni artırmak, 0 dosya ve daha sonra dosyaya değişken ayarlıdır yapmalıyım ne. Size 1 bir max vererek, 0 ile Accesstrys @ her zaman overwritting konum gibi görünüyor, ve sonra değişkene eşit dosyayı ayarlayın.

Birçok sorun sizi ettik yaklaşım vardır. Örneğin

  1. REMOTE_ADDR her kullanıcı için benzersiz değil
  2. Eğer sunucu isabet eşzamanlı kullanıcıların dikkat sürece bir dosyaya bilgi yazma çalışmaz
  3. $ Accesstry + + onun değer kaydedilir asla böylece kullanılan her zaman kaybolur.
  4. vb.

You need to use a feature called Sessions and stored the information in the session or a database. Take a look at http://us.php.net/manual/en/features.sessions.php

Bir deneyin yazılan her zaman, 0'a erişim trys sayısını sıfırlar. Böyle bir veritabanı veya oturum olarak bir sunucu tarafı çözümü girişimleri sayısını saklamak gerekir.

EDIT As mentioned in my comments, my previous brainfart about putting such info in a cookie is simply worst practices. Thank the stars for community editng.

Ben oldukça değerini teslim kontrol daha kodda bir daha konuyu eklemek istiyorum buna eşittir, isset kullanmak istiyorsunuz.

if(isset($_POST['Submit'])) {
// Action code
}

Check out the examples of how the login form can be developed efficiently.
Refer the following links :
Login form sample code
File open and Write - PHP Function
Session to track the value until session expires/browser closed