Problema login con Safari

Alex@1983

Utente Attivo
9 Mag 2015
126
2
18
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

PHP:
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");
 
Se funziona con tutti gli altri, non potrebbe essere un problema di Safari e nelle sue impostazioni?
 
Ciao Max e Ninja .... grazie per le risposte ....

Ho aggiunto exit; ... dopo header () .... ma non cambia nulla ....

Max ..... francamente non saprei se possa dipendere dalle opzioni di Safari .... sono un Androidiano convinto e il mondo Apple .... lo conosco pochissimo ...

non saprei .....
 
Ultima modifica:
Qualcuno ha qualche idea su come si possa risolvere ??? ... .

io sto cercando un po ovunque in giro per il web .... ma non riesco a venirne fuori .....

.......
 
La logica della if non mi convince molto.

PHP:
if (isset($_SESSION['login'])) {
    header("Location: calendario.php");
    exit;
}elseif (isset($_POST['password'])) {
    if ($_POST['password'] == $password) {
        $_SESSION['login'] = "verificata";
        header("Location: calendario.php");
        exit;
    }
}

sulla pagina calendario.php ci sarà un link con riferimento una pagina di logout.php con codice simile a questo.

PHP:
session_start();
session_destroy();
header("Location: login.php");
exit;
 
La logica della if non mi convince molto.
Ma se funziona su tutti tranne che safari ci sarà un motivo? Se FF non da problemi credo poco a errori di codice, poi le vie del Signore sono infinite
 
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 ??
 
Il problema è proprio di Safari, a leggere in giro per la rete, sembra essere dovuto al fatto che c'è una protezione su Cross-Site Tracking che è ON su Safari.
Ora, tu non puoi ovviamente metterla a OFF via software, se no addio protezione ;-) ne puoi chiedere a tutti quelli che visitano la tua pagina di farlo manualmente, se no fuggirebbero all'istante, penserebbero che c'è qualche tranello sotto.
Cosa puoi fare: cercare soluzioni in rete, magari iniziando a leggere qui: https://code-examples.net/it/q/9787af
Oppure ripensare completamente alla logica del tuo sito ed evitare l'uso di un iframe.
 
Il problema è proprio di Safari, a leggere in giro per la rete, sembra essere dovuto al fatto che c'è una protezione su Cross-Site Tracking che è ON su Safari.
Ora, tu non puoi ovviamente metterla a OFF via software, se no addio protezione ;-) ne puoi chiedere a tutti quelli che visitano la tua pagina di farlo manualmente, se no fuggirebbero all'istante, penserebbero che c'è qualche tranello sotto.
Cosa puoi fare: cercare soluzioni in rete, magari iniziando a leggere qui: https://code-examples.net/it/q/9787af
Oppure ripensare completamente alla logica del tuo sito ed evitare l'uso di un iframe.
Ciao MarcoGrazia e grazie per la risposta,

in realtà è da un paio di giorni che giro in rete cercando una soluzione , ma senza risultati .

ho provato anche la soluzione dell'header proposta nell'articolo che mi hai suggerito :

<?php
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
?>

Ma non risolve nulla .... e le altre soluzioni proposte a seguire , sempre all'interno di quell'articolo , devo ammettere che sono già troppo complicate perchè riesca a testarle in completa autonomia...
 
Non la risolve perché se leggi tutto l'articolo, ad un certo punto dice anche che Apple ha modificato quel sistema e quindi il codice P3P non lo accetta.
Purtroppo a problemi complessi, non ci sono risposte semplici.
 
Ciao a tutti , ho risolto grazie all' aiuto di un utente del forum iprogrammatori.it ... hormus ... che ringrazio ancora

Posto qui la soluzione nel caso possa essere di supporto a qualche altro utente ...

Esempio login.php con 0 byte di contenuto se si usa header Location.

PHP:
<?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.
 
Ultima modifica:
Mi scusi Alex@1983 ma è hormus, sono lieto ad averla aiutato poiché vedevo il suo problema ovunque:D
EDIT: grazie per aver sistemato.
 
Ultima modifica:

Discussioni simili