Pregunta

He estado usando PHP y JavaScript para crear el sitio web de mi padre.Quiere incorporar un sistema de inicio de sesión en su sitio web y yo tengo el diseño del sistema usando PHP.Mi problema es ¿cómo muestro los botones si la persona ha iniciado sesión?

Por ejemplo - Tienes Hogar, Productos, Sobre nosotros, y Contacto.quiero tener botones para Distribuidor, Distribuidor, y tal vez otra información si el usuario ha iniciado sesión.entonces tendré Hogar, Productos, Sobre nosotros, Contactos, Distribuidor (si inicia sesión como distribuidor), Distribuidor (si inicia sesión como distribuidor), etc.

¿JavaScript sería una buena forma de hacer esto o PHP, o tal vez incluso ambos?Usar JavaScript para mostrar y ocultar botones, y PHP para verificar qué botones mostrar.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

¿Fue útil?

Solución

En cuanto a la seguridad, No puedes confiar en lo que viene del cliente.:

  • El visitante puede ver todo su código (HTML y Javascript, no PHP) y probar cosas.
  • El visitante ni siquiera podrá utilizar un navegador;es trivialmente fácil enviar una solicitud con un script

Esto significa que ocultar los botones es un buen diseño de interfaz de usuario (porque no puede usarlos si no ha iniciado sesión).Pero no es una característica de seguridad.La característica de seguridad es verificar, en el servidor, que el visitante haya iniciado sesión antes de cada acción que lo requiera.

Si no desea mostrar los botones, no es útil enviar el HTML y las imágenes al navegador y luego ocultarlos con Javascript.Lo comprobaría con PHP.

Otros consejos

En tu archivo de menú o donde 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, simplemente haga esto:

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

Donde 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;
        }
    }
?>

Si usas javascript para ocultar los botones, abres un agujero de seguridad en la aplicación.Un usuario malintencionado podría desactivar JavaScript o aplicar alguno propio para eludir su seguridad.

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

También debería poder verificar el acceso del usuario en el lado del servidor cada vez que intente usar un botón restringido.

Lo que hemos hecho en mi trabajo es tener una biblioteca que proporciona funciones como verificar 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 solo los usuarios autenticados deberían ver, el controlador verifica si han iniciado sesión y, en caso contrario, los redirige a la página de inicio de sesión.

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

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

En primer lugar, la seguridad no es un problema a la hora de elegir.Debe tener un control de seguridad en el servidor cuando ejecuta una acción.Qué código decide mostrar/ocultar el botón que conduce a la acción es irrelevante.

Eso nos deja con un solo inconveniente al mostrar/ocultar lógica en Javascript: el HTML enviado al usuario es más grande de lo necesario.Puede que esto no sea gran cosa.

Sin embargo, tener lógica de mostrar/ocultar en PHP tiene un inconveniente.El código PHP requerido suele ser un etiqueta de sopa.El código de Akira proporciona un buen ejemplo de cómo se hace habitualmente.

El código Javascript correspondiente probablemente se vería así:

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

(suponiendo que los elementos que podrían ocultarse tengan display:none de forma predeterminada).

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

Entonces, si ya tiene un script que se ejecuta cuando se carga su documento por otros motivos, consideraría seriamente tener una lógica de mostrar/ocultar allí.

Básicamente, donde tienes tu menú en html, digamos como una lista <ul> <li>Home</li> </ul> agregas php después </li> del último artículo:

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

<li>My Account</li>

<?php  
  }
?> 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top