Problema login con Safari

[email protected]

Utente Attivo
9 Mag 2015
120
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");
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.280
330
83
Se funziona con tutti gli altri, non potrebbe essere un problema di Safari e nelle sue impostazioni?
 

[email protected]

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

[email protected]

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

.......
 

ninja72

Utente Attivo
15 Giu 2020
24
4
3
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;
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.280
330
83
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
 

[email protected]

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

MarcoGrazia

Utente Attivo
15 Dic 2009
785
16
18
58
Udine
www.stilisticamente.com
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.
 

[email protected]

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

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.280
330
83

[email protected]

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

Hormus

Utente Attivo
26 Giu 2020
83
10
8
Mi scusi [email protected] ma è hormus, sono lieto ad averla aiutato poiché vedevo il suo problema ovunque:D
EDIT: grazie per aver sistemato.
 
Ultima modifica: