2016-04-02 8 views
0

"Güvenli" bir php sayfası için belirteci kontrol edecek bir işlev yapmak istiyorum (bir iletiyi geçiren ve oturumdaki bir tane).
            Ama ikisini yazmak istemiyorsanız böyle ifadeler:Bir if ifadesinde sipariş yürütme işlevi php

function CheckToken(){ 
    if(isset($_POST['token']) && isset($_SESSION['token'])) 
     if($_POST['token']==$_SESSION['token']) return true; 

    return false; 
} 

Böyle bir şey yapabilir miyim (?):

function CheckToken(){ 
    if(isset($_POST['token']) && isset($_SESSION['token']) && $_POST['token']==$_SESSION['token']) return true; 
    return false; 
} 

          İşte bu fonksiyonların çalıştırıldığı sırayla ilgili (ve operatörü kullanırken). Eğer AND işlenenini kullanıyorsanız, o zaman ilk şartlar ns yanlıştır, ikinciyi değerlendirmez. Bu sorunun bir çözümüne sahip olduğunu hatırlıyorum. (Sadece ilk fonksiyonu değerlendirmek, eğer yanlış ise ikinci olanı değerlendirmemek).
          Her şeyi tek bir satıra koymak güvenli midir (ikinci örnekte yaptığım gibi)?

+0

Koşullarımı ayırmak istediğim gibi her zaman ilk seçenekle sataşırım. Bu, problemleri teşhis etmek ve ayrıca duruma bağlı olarak ayrı hata mesajlarını geri göndermek içindir. Ancak, kullanıcılara hataları döndürme konusunda endişelenmiyorsanız, o zaman ya bir tanesi iyi olur. Her ikisi de aynı şeyi yapıyor. – Juakali92

cevap

1

PHP, diğer ana dillerdeki her zamanki gibi if deyimiyle aynı şeyi yapar, yani soldan sağa doğru kontrol edin.

Eğer

if (cond1 && cond2 && cond3) 

senaryo 1 var Yani eğer:
cond1 doğruysa, o zaman cond2 ve sonra cond3 çalıştırır.
Örnek: https://3v4l.org/Ap9SQ

Senaryo 2: en cond2false olduğunu varsayalım Eğer
ardından cond3 göz ardı edilecektir.
Örnek: https://3v4l.org/u9P4O

aynı cond2 ve cond3 atlanacak, OR

if (cond1 || cond2 || cond3) 

cond1 doğruysa gider.
Örnek: senin fonksiyonu sadece true veya false dönüyor beri


https://3v4l.org/ZAZcD Yani, hatta böyle bir şey bunu kolaylaştırabilirsiniz: okunabilmesi için

function CheckToken() { 
    return isset($_POST['token']) && 
      isset($_SESSION['token']) && 
      $_POST['token'] == $_SESSION['token']; 
} 

Bölünmüş hatları. Ayrıca boş kontrol için birden fazla değişkeni geçebildiğiniz gibi isset numaralı elkitabına da bakınız.

1

Evet, siparişi değiştirmenin gerçekten bir farkı yok. Bu tamamen güvenlidir, çünkü tüm yaptığı yürütme EXACT aynıyken komut dosyasının görünümünü değiştirmektir.

İkinci seçeneği yapmak en iyisi olur.