2008-08-10 9 views
15

He estado usando PHP y JavaScript para construir el sitio web de mi padre. Él quiere incorporar un sistema de inicio de sesión en su sitio web, y yo tengo el diseño para el sistema que usa PHP. Mi problema es cómo puedo mostrar los botones si la persona se registra enScript de inicio de sesión con botones ocultos

por ejemplo -? Tienes Inicio, productos, Sobre Nosotros y de contacto. Quiero tener botones para distribuidor, Distribuidor, y quizás otra información si el usuario ha iniciado sesión. Por lo tanto voy a tener Inicio, productos, Sobre Nosotros, Contactos, distribuidor (si fuera distribuidor inicio de sesión), Distribuidor (si el distribuidor inicia sesión), y así sucesivamente.

¿Sería JavaScript una buena manera de hacer esto o PHP, o tal vez las dos? Usar JavaScript para mostrar y ocultar botones, y PHP para verificar para ver qué botones mostrar.

Respuesta

18

En cuanto a seguridad, no se puede confiar en lo que viene desde el cliente:

  • el visitante puede ver todo el código (HTML y Javascript, no PHP) y probar cosas
  • El visitante no puede incluso usa un navegador; es trivialmente fácil enviar una solicitud con un script

Esto significa que ocultar los botones es bueno Diseño de interfaz de usuario (porque no puede usarlos si no está conectado). Pero no es una característica de seguridad. La característica de seguridad es verificar, en el servidor, que el visitante está conectado antes de cada acción que lo requiere.

Si no tiene la intención de mostrar los botones, no es útil enviar el HTML y las imágenes al navegador y luego ocultarlos con Javascript. Verificaría con PHP.

2

Si usa javascript para ocultar los botones, abre un agujero de seguridad en la aplicación. Un usuario malintencionado podría desactivar javascript o aplicar algunos propios para evitar su seguridad.

Sugiero usar PHP para elegir o bien renderizar los botones o no. Hago esto en .NET con bastante frecuencia.

Debería poder verificar el acceso del usuario en el lado del servidor siempre que intenten usar un botón restringido también.

1

Lo que hemos hecho en mi trabajo es tener una biblioteca la proporciona funciones como la comprobación de si el usuario ha iniciado sesión. Por ejemplo:

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

Para las páginas que sólo authenicated usuarios vean, el controlador comprueba si están conectados y si no los redirige a la página de inicio de sesión.

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

En el archivo de menú o w/e pones:

<? 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> 

Luego, en las páginas que requieren autenticación a hacer esto:

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

Dónde auth.php puede contener:

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

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

Para resumir lo que se muestra arriba: usted comprobar para ver si están Si estás conectado, mostrarás los botones/enlaces que solo quieres que los miembros registrados vean. – Brad

1

Todo lo que Christian Lescuyer escribió es correcto . Nótese, sin embargo, que dijo "lo haría" y no "debería". La elección no es tan fácil.

En primer lugar, la seguridad no es un problema en la elección. Deberías tener un control de seguridad en el servidor cuando ejecutas una acción. El código que decide mostrar u ocultar el botón que conduce a la acción es irrelevante.

Eso nos deja con un solo inconveniente de hacer mostrar/ocultar la lógica en Javascript: el HTML enviado al usuario es más grande de lo necesario. Esto puede no ser un gran problema.

Tener la lógica mostrar/ocultar en PHP tiene un signo menos, sin embargo. El código PHP requerido es generalmente un tag soup. El código de Akira proporciona un buen ejemplo de cómo se hace habitualmente.

correspondiente código Javascript, probablemente se vería algo como esto:

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

(suponiendo que los elementos que podrían estar ocultos tienen display: none por defecto).

Este estilo también permite un agradable escenario "Ajax": el usuario ve una página sin área secreta, ingresa la contraseña, ve el área secreta todo sin refrescar la página.

Por lo tanto, si ya tiene una secuencia de comandos que se ejecuta cuando su documento se carga por otros motivos, consideraría seriamente tener allí una lógica show/hide.

0

Básicamente donde tiene su menú en html, dicen como una lista <ul> <li>Home</li> </ul> agrega php después de </li> del último elemento:

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

<li>My Account</li> 

<?php 
    } 
?> 
Cuestiones relacionadas