Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    110

    Autentificazione e Gestione Pagine

    Salve a tutti, vi spiego subito il mio problema: sto scrivendo la sezione di amministrazione del mio sito in php, in cui è possibile aggiungere news, links, download ecc (stile phpnuke). Così, collegandosi alla prima pagina di amministrazione, vengono richiesti nome utente e password per potersi loggare. La fase di login credo sia stata progettata abbastanza bene (grazie all'aiuto di un manuale), con tanto di query dal database per confrontare la password, e con tanto di cookie settati in caso di login, e cancellati in caso di logout. Ora il problema è questo: una volta loggati viene effettuato il redirect tramite

    Codice PHP:
    header("Location: news.php"); 
    alla pagina news.php. In pratica ogni pagina (news, download, links ...), ha un proprio file php che la gestisce. Così news ha news.php, download ha download.php ecc. Se però nella barra del browser digito direttamente http://blablabla/news.php , l'accesso viene effettuato tranquillamente, senza la necessità di essersi loggati. Come faccio a dire che la pagina è accessibile solo se si è loggati, e che se si digita direttamente l'indirizzo, l'accesso è negato? Grazie in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    442
    è molto semplice:


    Codice PHP:

    if(isset($_SESSION['nick']))
    {
    -----
    fai questo----
    }
    else
    {echo 
    "
    <script>
    alert(\"Non hai i permessi per accedere in quanto non sei tu l'amministratore\");
    self.location.replace(\"nomepaginaacui vuoi redirezionareintruso\");
    </script>
    "
    ;


  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    110
    Ti ringrazio, ma ci sono delle cose che non ho capito:

    ho una pagina che presenza i form di input di username e password. L'action di questa form, chiama un'altra pagina che fa i giusti controlli per verificare la correttezza dei dati immessi da un utente, e poi fa

    Codice PHP:
    session_start();
    $_SESSION['logged'] = true;
    header("Location: news.php"); 
    Quando la pagina news.php riceve la chiamata, esegue:

    Codice PHP:
    session_start();
    if(isset(
    $_SESSION['logged'])){
        
    faccio della roba }
    else {
        
    altra roba per redirigere l'intruso altrove } 
    Questo meccanismo non funziona, perchè anche se accedo direttamente alla pagina news.php, l'accesso viene eseguito normalmente, come se provenissi dalla pagina che setta $_SESSION['logged'] a true. Spero di essermi spiegato al meglio.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    110
    Nessuno può aiutarmi?

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    442
    $utente['passwd'] è il campo del db
    $passwd=$_POST['passwd'] è la password passata nella pagina di login

    if($utente['passwd']==$passwd)
    {
    session_start();

    $_SESSION['passwd']=$utente["IDuser"];
    $_SESSION['nick']=$nick;
    header("Location:news.php");
    }

    e poi in tutte le altrepagine

    if(!issset($_SESSION['nick']))
    {
    header("Locationagina.php");
    exit();
    }

    è molto importante che metti exit per non farli eseguire altro codice della stessa pagina dopo il redirect

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    110
    Non mi funziona e non capisco perchè. Premetto che nel database esiste un solo utente, admin, e rimarrà solo. Il mio codice è il seguente:

    Codice PHP:

    //Questa è la pagina chiamata dopo aver inserito nome utente e password
    require_once('login.php');
    $submit $_POST['submit'];
        if (
    $submit == 'Login') {
            if (
    strlen($_POST['username']) <= 20 && strlen($_POST['password']) <= 20) {
                
    $feedback user_login(); //user_login() è una funzione presente in login.php
            
    }
            else {
                
    $feedback 'Error: username and password are too long.';
            }
            if (
    $feedback == 1) {
                
    session_start();
                
    $_SESSION['logged'] = 1;
                
    header("Location: news.php");
            }
            else {
                
    $feedback_str "

    $feedback</p>";
                echo 
    $feedback_str;
            }
        }
        else {
            
    $feedback_str '';
        } 
    Ora, la pagina news quando riceve la chiamata, esegue:

    Codice PHP:
    session_start();
    if(!isset(
    $_SESSION['logged']){
          
    header("Location: altrapagina.php");
          exit();
    }
    else {
    fai quello che devi fare

    Ora, mi sembra che la cosa sia come dite voi, ma, non capisco perchè, NON FUNZIONA! Cioè, se inserisco nome utente e password, mi fa accedere alla pagina come dovrebbe, ma mi fa accedere anche se digiro direttamente http://localhost/admin/news.php . Aiuuuutooooooo!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    442
    il problema sta che $_SESSION['logged'] esiste sempre quindi devi mettere

    if(!isset($_SESSION['logged'] ==1))
    {
    header.....
    }
    else
    {
    fai codice
    }

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    442
    ti spiego meglio se metti $_SESSION['logged'] =1 in tutti gli altri casi puoi accedere anche digitando l'indirizzo e la sessione viene controllata solo se $_SESSION['logged'] =1
    chiaro?

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    110
    Aaaaaahhh, ora capisco! Ti ringrazio!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.