JavaScript ve PHP - gizli düğmeleri ile Giriş Script

6 Cevap php

Benim babalar web sitesi oluşturmak için PHP ve JavaScript kullanarak edilmiştir. O kendi web sitesinde bir giriş sistemi dahil etmek istiyor. Ben PHP kullanarak giriş sistemi için tasarım, benim sorunum kişinin oturum eğer ben düğmelerini göstermek nasıl olduğunu var

Örneğin - Sen Ev, Ürünler, Hakkımızda ve İletişim var. Peki ben Yani Hakkımızda, İrtibat Ev, Ürünler, olacak kullanıcı oturum ise Bayi, Distribütör, ve belki diğer bilgiler için düğmeleri istiyorum, Bayi, Distribütör (eğer distribütör login), ve (bayi giriş varsa) vb.

Javascript bunu yapmak için iyi bir yol olacağını hatta belki ikisi, php olur. Göstermek için hangi düğmeleri görmek için kontrol düğmelerini göstermek ve gizlemek için JavaScript kullanarak, ve php.

6 Cevap

Güvenlik ile ilgili olarak, you cannot trust what comes from the client,

  • Ziyaretçi tüm kodunuzu görmek (HTML ve Javascript değil, PHP) ve şeyler deneyebilirsiniz
  • Ziyaretçi hatta bir tarayıcı kullanmak olmayabilir; Bir komut ile bir istek göndermek için trivially kolay

Bu (giriş değil eğer bunları kullanamazsınız çünkü) iyi kullanıcı arabirimi tasarımı düğmeleri olduğunu gizleme demektir. Ama bir güvenlik özelliği değildir. Güvenlik özelliği ziyaretçinin gerektiren her eylem öncesinde kaydediliyor, sunucu üzerinde, kontrol ediyor.

Eğer düğmelerini göstermek niyetinde değilse, bu tarayıcıya HTML ve görüntü göndermek ve daha sonra JavaScript ile bunları gizlemek için kullanışlı değil. PHP ile kontrol.

Menü dosya veya w / e koymak:

<? require 'auth.php' ?>
<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Products</a></li>
    <? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>

Sonra auth gerektiren sayfalarda sadece bunu:

<?php 
    require 'auth.php';
    require_login();
?>

Nerede auth.php içerebilir:

<?php

    function loggedin(){
    	return isset( $_SESSION['loggedin'] );
    }

    function require_login(){
    	if( !loggedin() ){
    		header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
    		exit;
    	}
    }

?>

Eğer düğmelerini gizlemek için javascript kullanırsanız, uygulamada bir güvenlik delik açın. Kötü niyetli bir kullanıcı javascript devre dışı bırakmak veya güvenlik etrafında almak için kendi bazı geçerli olabilir ya.

Ben düğmeleri ya da değil işlemek için ya seçti PHP kullanmanızı öneririz. Ben oldukça sık. NET'te bunu.

Onlar da kısıtlı düğmesini kullanmayı deneyin ne zaman sunucu tarafında kullanıcının erişimini kontrol etmek gerekir.

Benim iş yapmış ne gibi kullanıcı Örneğin oturum olup olmadığını denetleme gibi fonksiyonları sağlayan bir kütüphane var olduğunu:

<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
    echo 'html for logged in user';
}
// rest of html

Sadece authenicated kullanıcılar görmelisiniz sayfaları için, kontrolör çekler onlar açmış değil eğer oturum açma sayfasına yönlendirir eğer.

<?php
public function viewCustomer($customerId) {
    if (!isLoggedIn())
        redirectToLoginPage();
}

Hıristiyan Lescuyer yazdı şeyin doğru olduğunu. "Ben istiyorum" ve "yapmanız gerekir" değil dedi, ancak, dikkat edin. Seçim o kadar kolay değildir.

Her şeyden önce, güvenlik seçiminde bir sorun değildir. Bir eylemi çalıştırdığınızda sunucu üzerinde güvenlik kontrolünden olmalıdır. Kod eylem açar düğmesini gizlemek / göstermek için karar Hangi ilgisizdir.

Bu Javascript göstermek / gizlemek mantığı yapmanın tek dezavantajı ile bize bırakır - kullanıcıya gönderilen HTML gereğinden fazla büyük. Bu büyük bir anlaşma olmayabilir.

PHP göstermek / gizlemek mantığı sahip olsa da, bir eksi var. Gerekli PHP kodu genellikle tag soup olduğunu. Akira'nın kod genellikle yapılır nasıl iyi bir örnek sağlar.

Javascript kodu gelen muhtemelen bu gibi bir şey olacaktır:

if (logged())
    {
    elementSecretArea.style.display = "list-item";
    }

(Gizli olabilir elemanları ekran var olduğunu varsayarak: Varsayılan yok).

Bu tarzı da güzel "Ajax" senaryo sağlar: kullanıcı, w / secret alanı o sayfasını görür şifre girdikten, bütün sayfayı yenileyerek olmadan gizli alanını görür.

Yani, sen zaten diğer nedenlerle belge yük, ben orada ciddi göstermek / gizlemek mantığı sahip düşünün çalışan bir komut dosyası varsa.

Eğer html menü var burada Temelde, bir liste olarak <ul> <li>Home</li> </ul> Eğer </li> son öğenin sonra php eklemek söylüyor:

<?php
  if($session-logged_in) {    
?>

<li>My Account</li>

<?php  
  }
?>