RISOLTO - Problema login con Safari

di il
5 risposte

RISOLTO - Problema login con Safari

Ciao a tutti ,
vi chiedo una mano ....

Ho una piccola pagina web , che visualizza un calendario , alla quale si accede dopo un login .

Tutto funziona alla meraviglia con i più comuni browser ( chrome , firefox , edge , etc ) ma se si prova ad accedere al calendario usando Safari ... dopo aver inserito la password ed aver cliccato su " Entra " .... NON SUCCEDE NULLA .... il campo password si svuota ma non si viene reindirizzati alla pagina del calendario

Qualcuno sa darmi una dritta ?

Posto a seguire il codice della pagina di login

Grazie in anticipo

session_start();  
$password="MiaPassword";     
if (isset($_SESSION['login'])) {  
    if (isset($_POST['logout'])) { 
        unset($_SESSION['login']); 
        $messaggio = "Logout effettuato con successo!"; 
    } else { 
        header("Location: login.php");  
    }  
} else { 
    if (isset($_POST['password'])) { 
        if ($_POST['password'] == $password) { 
            $_SESSION['login'] = "verificata";              
            header("Location: calendario.php"); 
        exit;

5 Risposte

  • Re: RISOLTO - Problema login con Safari

    Sicuramente login.php avrà contenuto mentre se vuoi effettivamente usare header Location la pagina deve essere priva di contenuto (output php 'echo, var_dump, print' o codice html incluso il BOM se non stai usando un IDE PHP 'appunto non usa BOM per i file UNICODE' e questo significa mostrare il form solo se non devi usare header Location).
  • Re: RISOLTO - Problema login con Safari

    Ciao

    Nel frattempo ho scoperto cosa " non piace ".......e cioè che ci sia la compresenza di una SESSION ed un iFRAME .... E' questo che blocca il reindirizzamento.

    Infatti se , senza modificare il codice , accedo all' URL puro della pagina di login ...e non dal suo iFRAME .....tutto funziona correttamente .

    Il problema è che devo necessariamente usare un frame ......e non so come smarcare il problema

    Suggerimenti ??

    Grazie
  • Re: RISOLTO - Problema login con Safari

    Esempio login.php con 0 byte di contenuto se si usa header Location.
    <?php
    $location = true;
    $logout = false;
    $test = 'login';
    $messaggio = $password = '';
    if(session_start()) {
    $password="MiaPassword";   
    if (($logout = (!isset($_POST['password']) && isset($_SESSION['login'])))) {  
        if (isset($_POST['logout'])) { 
            unset($_SESSION['login']); 
            $location = false;
            //restore session cookie samedomain header path /
    		header('Location: login.php');
        }
    } else { 
        if (isset($_POST['password'])) { 
            if ($_POST['password'] === $password) { 
                $_SESSION['login'] = "verificata";              
                $location = false;
                //restore session cookie samedomain header path /
                header("Location: calendario.php"); 
            } else {
    	        $messaggio = "La password non corrisponde<br>";
    		}
        }
    }
    }
    
    ?>
    <?php
    if($logout) {
    $test = 'logout';
    } else {
    $test = 'login';
    }
    if($location): ?>
    <!DOCTYPE html> 
    <html>
    <head>
    <title><?php echo $test; ?></title>
    </head>
    <body>
    <form name="<?php echo $test; ?>" method="POST" action="login.php">
    <?php if(!$logout): ?>
    <input type="text" id="password" name="password" value=""><br>
    <input type="submit"><br>
    <?php else: ?>
    <button type="submit" id="logout" name="logout">logout</button><br>
    <?php endif; ?>
    <?php echo $messaggio; ?>
    </form>
    </body>
    </html>
    <?php endif; ?>
    <?php unset($location, $logout, $messaggio, $test, $password); $_POST = array(); ?>
    Quando l'agente utente riconosce l'elemento frame effettua una seconda connessione per recuperarla tale codice html.
  • Re: RISOLTO - Problema login con Safari

    Hormus ha scritto:


    Esempio login.php con 0 byte di contenuto se si usa header Location.
    <?php
    $location = true;
    $logout = false;
    $test = 'login';
    $messaggio = $password = '';
    if(session_start()) {
    $password="MiaPassword";   
    if (($logout = (!isset($_POST['password']) && isset($_SESSION['login'])))) {  
        if (isset($_POST['logout'])) { 
            unset($_SESSION['login']); 
            $location = false;
            //restore session cookie samedomain header path /
    		header('Location: login.php');
        }
    } else { 
        if (isset($_POST['password'])) { 
            if ($_POST['password'] === $password) { 
                $_SESSION['login'] = "verificata";              
                $location = false;
                //restore session cookie samedomain header path /
                header("Location: calendario.php"); 
            } else {
    	        $messaggio = "La password non corrisponde<br>";
    		}
        }
    }
    }
    
    ?>
    <?php
    if($logout) {
    $test = 'logout';
    } else {
    $test = 'login';
    }
    if($location): ?>
    <!DOCTYPE html> 
    <html>
    <head>
    <title><?php echo $test; ?></title>
    </head>
    <body>
    <form name="<?php echo $test; ?>" method="POST" action="login.php">
    <?php if(!$logout): ?>
    <input type="text" id="password" name="password" value=""><br>
    <input type="submit"><br>
    <?php else: ?>
    <button type="submit" id="logout" name="logout">logout</button><br>
    <?php endif; ?>
    <?php echo $messaggio; ?>
    </form>
    </body>
    </html>
    <?php endif; ?>
    <?php unset($location, $logout, $messaggio, $test, $password); $_POST = array(); ?>
    Quando l'agente utente riconosce l'elemento frame effettua una seconda connessione per recuperarla tale codice html.
    Grande Hormus ! ... Funziona alla perfezione !!!! .... ...

    Grazie mille per il supporto !!!
  • Re: RISOLTO - Problema login con Safari

    Figurati è solo un un'esempio.
    Ho aggiunto un globale $test superfluo poiché else creerebbe comunque $test.
    Uhm si dovrebbe anche decidere cosa fare se session_start() ritorna FALSE e se invio $_POST['password'] se ho già $_SESSION['login'] (cliente già autenticato) se è un attacco hacker (dal momento che il form login sarà solo visibile se non esiste $_SESSION['login'] e in quel caso sarà presente il form logout ma nel mio codice valuto l'assenza di $_POST['password'] altrimenti è form login) .
Devi accedere o registrarti per scrivere nel forum
5 risposte