Visualizzazione risultati 1 fino 4 di 4

Discussione: sessioni php dopo headers redirect location

  1. #1
    Guest

    Predefinito sessioni php dopo headers redirect location

    Eccomi ancora qui a rompere!
    Vado subito al sodo
    Ho una pagina iscrizione.php che crea una mail contenente un link che riporta alla pagina conferma.php
    L'utente si registra, gli arriva la mail, clicca sul link.
    La pagina conferma.php apre una sessione (per poter inserire un menù principale che c'è in cima a tutte le pagine del sito) e fa una serie di controlli; se tutto va bene visualizza un messaggio e fa un redirect (tramite headers location) alla pagina login.php.
    Alla pagina login.php l'utente si logga, viene salvata una sessione $_SESSION['id'] contenente l'id dell'utente e viene fatto un redirect (sempre tramite header) alla pagina member.php.
    Questa per qualche strana ragione anzichè vedermi la sessione già aperta me ne crea una nuova e quindi mi vede come se non fossi loggato.
    Provo allora a riloggarmi e allora funziona.Non va solo dopo il redirect dalla pagina conferma.php alla pagina di login.Togliendo il redirect e andando manualmente alla pagina login.php tutto funzia.
    Tutti gli header e tutte le session_start() sono inviati prima di qualsiasi output.
    Ho provato anche inserendo un error reporting in cima alle pagine incriminate ma senza successo.
    Inoltre quando member.php crea una nuova sessione, vedo tra i cookie anche quello della sessione precedente.
    Non capisco veramente dove sia il problema...Ho fatto numerosi test ma senza successo...Se volete vi posto i codici che uso...

    Grazie!

    ps: ho provato anche a inserire prima del redirect un session_write_close(); ma senza risultati.Si direbbe quasi che l'header mi svuoti od interferisca con le sessioni php

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Prima dell'header(), c'é qualche output HTML (HTML o echo o simili)? Se sì, prova ad eliminarlo (anche perché tenerlo è inutile, visto che c'é un redirect).

    Ciao!

  3. #3
    Guest

    Cool

    No.Lo ho detto anche nel primo post.Nessun output prima del redirect e del session start (il redirect è temporizzato in tutte le pagine a 5sec.)
    E la sessione è sempre avviata all'inizio dei code.Non so proprio dove sia il problema.A quanto pare dopo il redirect dalla pagina di conferma alla pagina di login a causa dell' header la pag login.php non riesce a dare valore alle sessioni.Togliendo il redirect il problema è risolto.Ma ho bisogno del redirect.Domani vi posto i codici.
    Grazie x l'aiuto ed il tempo che mi state dedicando.

  4. #4
    Guest

    Predefinito

    Eccovi i codici:

    conferma.php
    Codice PHP:
    <?php
    session_start
    ();
    //controllo indirizzo ip e ora
    $ipconf = $_SERVER['REMOTE_ADDR'];
    $dataconf = date("Y-m-d H:i:s");
    $id_pagina_conferma = addslashes($_GET['id_conferma']);
    $codiceconferma = addslashes($_GET['codiceconferma']);

    // includiamo il file di configurazione
    @include_once "config.php";

    // controlliamo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT id FROM iscrizioni WHERE id='$id_pagina_conferma' AND codiceconferma='$codiceconferma' AND attivo='0'") or die (mysql_error());
    $ctrl_confermato = @mysql_query("SELECT id FROM iscrizioni WHERE id='$id_pagina_conferma' AND codiceconferma='$codiceconferma' AND attivo='1'") or die (mysql_error());

    if(@
    mysql_num_rows($ctrl_confermato)<1)
    {
    if(@
    mysql_num_rows($ctrl_login)<1)
    {
    // esito conferma negativa
    $message = "<div class=\"error\"><img src=\"http://partypoints.altervista.org/immagini/errore.png\" alt=\"Immagine errore\"> Errore interno: l' account &egrave; inesistente. Contatta l'amministratore per ottenere ulteriori informazioni</div>";
    }else{
    // esito conferma positiva quindi rendiamo l'utente attivo e aggiungiamo i dati al database
    $obj_pagina_conferma = @mysql_fetch_object($ctrl_login) or die (mysql_error());
    $query_attivo = @mysql_query("UPDATE iscrizioni SET attivo='1', ipconf='$ipconf', dataconf='$dataconf' WHERE id=".$obj_pagina_conferma->id) or die (mysql_error());

    // e riportiamo il messaggio di conferma avvenuta
    $message = "<div class=\"ok\"><img src=\"http://partypoints.altervista.org/immagini/tick.png\" alt=\"Immagine ok\"> La conferma della tua iscrizione &egrave; andata a buon fine. Grazie per esserti registrato.<br>Stai per essere reindirizzato alla <a href=\"http://partypoints.altervista.org/login.php?".SID."\">pagina di login</a>.</div>";

    session_write_close();
    // redirect alla pagina di login
    @header('refresh: 5; url=login.php?'.SID.'');
    }
    }else{
    $message = "<div class=\"error\"><img src=\"http://partypoints.altervista.org/immagini/errore.png\" alt=\"Immagine errore\"> Errore: l' account risulta gi&agrave; attivo</div><br>";
    }
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Party Points: conferma dell' iscrizione</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="stylesheet" type="text/css" media="screen" href="/menu_css/style_menu_principale.css">
    <meta http-equiv="Content-Type" content="text/html;charset=windows-1252">
    <META NAME="ROBOTS" CONTENT="noindex">
    <META NAME="author" CONTENT="My Nintendo 3DS Forum Staff">
    <style type="text/css">
    body {cursor: url(http://partypoints.altervista.org/immagini/cursore_home.gif), auto}
    a {cursor: url(http://partypoints.altervista.org/immagini/cursore_link_home.gif), auto}
    .error {background-color: #E0B0FF; font-weight: bold; -webkit-border-redius: 10px; -moz-border-radius: 10px; border-radius: 10px}
    .ok {background-color: #ACE1AF; font-weight: bold; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px}
    .textinput {position: absolute; left: 00px; bottom: 00px; padding: 3px; font: .9em "segoe ui"; color: #333333; background: #FBFBFB; border: 2px solid #007FFF; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; font-weight: bold}
    .goog-te-gadget-simple {width: 150px; height: 21px}
    </style>
    </head>
    <BODY BGCOLOR="#F5F5F5">
    <br><br>

    <div id="google_translate_element"></div><script type="text/javascript">
    function googleTranslateElementInit() {
    new google.translate.TranslateElement({
    pageLanguage: 'it',
    layout: google.translate.TranslateElement.InlineLayout.SIMPLE
    }, 'google_translate_element');
    }
    </script><script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" type="text/javascript"></script>
    <center><script src="http://counter1.contatoreaccessi.com/private/counter.js?c=ec7351bb62dcd768d6361fa7b046d142" type="text/javascript"></script>
    <br><br>

    <?php
    echo "$message";
    ?>

    <div style="height: 300px">
    </div>

    <?php
    @include "licenza.php";
    @include
    "menu_principale.php";
    ?>
    </center>
    </body>
    </html>
    login.php
    Codice PHP:
    <?php
    session_start
    ();

    // controllo sul parametro d'invio
    if( isset($_POST['login']))
    {
    // controllo username
    if($_POST['username'] == "")
    {
    $message2 = "<center><div class=\"error\"><img src=\"http://partypoints.altervista.org/immagini/errore.png\" alt=\"Immagine errore\"> Errore: il campo username non pu&ograve; essere vuoto</div></center>";
    }
    // controllo password
    elseif($_POST['password'] == "")
    {
    $message2 = "<center><div class=\"error\"><img src=\"http://partypoints.altervista.org/immagini/errore.png\" alt=\"Immagine errore\"> Errore: il campo password non pu&ograve; essere vuoto</div></center>";
    } else {
    // se i parametri sono in formato corretto interroghiamo il database
    $username = addslashes($_POST['username']);
    $password = addslashes($_POST['password']);

    // includiamo il file di configurazione
    @include "config.php";
    @require
    "criptare-decriptare.php";

    // controlliamo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT * FROM iscrizioni WHERE (username='$username' or email='$username') AND password='$password_criptata'") or die (mysql_error());
    if(@
    mysql_num_rows($ctrl_login)==1)
    {
    $obj = @mysql_fetch_object($ctrl_login);

    //controlliamo se utente attivo
    if($obj->attivo == 1){

    // esito login positivo quindi creiamo un id di sessione corrispondente all'utente
    $datalogin = date("Y-m-d H:i:s");
    $iplogin = $_SERVER['REMOTE_ADDR'];
    $sessione = $obj->id;
    $_SESSION['id'] = $sessione;

    // inseriamo alcuni dati di sicurezza
    mysql_query("UPDATE iscrizioni SET data_ultima_azione = '$datalogin', ip_ultimo_accesso = '$iplogin' WHERE id = '$obj->id'") or die (mysql_error());

    $sid = session_id();
    session_write_close();
    // redirect alla pagina degli iscritti
    @header('refresh: 5; url=member.php?PHPSESSID='.$sid.'');

    $message2 = "<center><div class=\"ok\"><img src=\"http://partypoints.altervista.org/immagini/tick.png\" alt=\"Immagine ok\"> Login avvenuto con successo!<br>Stai per essere reindirizzato al <a href=\"http://partypoints.altervista.org/member.php?PHPSESSID=".$sid."\">pannello di controllo del tuo profilo</a>
    </div></center>"
    ;

    //utente non attivo
    }else{
    $message2 = "<center><div class=\"error\"><img src=\"http://partypoints.altervista.org/immagini/errore.png\" alt=\"Immagine errore\"> Errore durante il login: il profilo selezionato non &egrave; ancora stato attivato tramite mail. <br> Se non hai ricevuto nessuna mail dopo l' iscrizione sei pregato di <a href=\"http://partypoints.altervista.org/contattaci.php\">contattarci</a></div></center>";
    }

    //password o username errati
    }else{

    // esito login negativo
    $message2 = "<center><div class=\"error\"><img src=\"http://partypoints.altervista.org/immagini/errore.png\" alt=\"Immagine errore\"> Errore durante il login: username/mail o password errati</div></center>";
    }
    }
    }else{
    // form per il login
    $message2 = "<form action=\"login.php\" method=\"post\">
    <div class=\"form\">
    <h1>Modulo di login:</h1>
    <SPAN STYLE=\"color: red\"><b>Username/mail: </b></SPAN><SPAN STYLE=\"color: #dedede\"> (se non sei ancora registrato fallo <a href=\"http://www.partypoints.altervista.org/iscrizione.php\">qui</a>)</SPAN><br><br>
    <input name=\"username\" type=\"text\" size=\"40\" maxlength=\"50\"><br><br>
    <SPAN STYLE=\"color: red\"><b>Password:</b></SPAN><br><br>
    <input name=\"password\" type=\"password\" size=\"40\" maxlength=\"40\"><br><br>
    <input name=\"login\" type=\"submit\" class=\"bottoni\" value=\"LOGIN\"> <input type=\"submit\" class=\"bottoni\" value=\"RICARICA LA PAGINA\" onclick=\"location.reload()\"><br><br>
    <br>
    </div>
    </form><br>
    <center><img src=\"http://partypoints.altervista.org/immagini/immagine_login.png\" alt=\"Login\">
    </center>"
    ;

    }
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Party Points: login</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="stylesheet" type="text/css" media="screen" href="/menu_css/style_menu_principale.css">
    <link rel="stylesheet" type="text/css" media="screen" href="/menu_css/style_iscrizione-login.css">
    <meta http-equiv="Content-Type" content="text/html;charset=windows-1252">
    <META NAME="description" CONTENT="Pagina di login per il sito Party Points: Loggati ora!">
    <META NAME="author" CONTENT="My Nintendo 3ds Forum Staff">
    <style type="text/css">
    .goog-te-gadget-simple {width: 150px; height: 21px}
    </style>
    </head>
    <BODY>

    <!--[if IE]>
    <style type="text/css">
    .bottoni {background-color: #FF8800; border: 3px solid #FCA800; color: #fff; font-weight: bold; padding: 0; height: 30px}
    .textinput {position: static; padding: 3px; font: .9em segoe ui; color: #333333; background: #FBFBFB; border: 2px solid #007FFF; -webkit-border-radius: 10px; -moz-border-radius: 10px; border-radius: 10px; font-weight: bold}
    #fondo_pagina {display: none}
    </style>
    <![endif]-->
    <br><br>
    <div id="google_translate_element"></div><script type="text/javascript">
    function googleTranslateElementInit() {
    new google.translate.TranslateElement({
    pageLanguage: 'it',
    layout: google.translate.TranslateElement.InlineLayout.SIMPLE
    }, 'google_translate_element');
    }
    </script><script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" type="text/javascript"></script>
    <center><script src="http://counter1.contatoreaccessi.com/private/counter.js?c=ec7351bb62dcd768d6361fa7b046d142" type="text/javascript"></script></center><br>

    <? echo "$message2"; ?>

    <br><br>

    <div id="fondo_pagina">
    </div><br><br>

    <?php
    @include "licenza.php";
    @include
    "menu_principale.php";
    ?>
    </body>
    </html>

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •