• User

    Prolema con sessioni

    Salve a tutti,
    vorrei sottoporvi un problema che mi sta facendo impazzire :arrabbiato:

    ho uno script per il login che funziona così:
    verifica user/pass sul database, se corretti, setta una variabile
    $_SESSION['utente'] = $id_utente;
    dopodichè fa un redirect (html) alla pagina da dove è stato fatto il login
    (senza settare cookie nè passare il SID via GET)

    in tutte le pagine (compresa quella del login ovviamente) c'è
    session_name("utente");
    session_start();

    e fino a due giorni fa, dopo aver fatto il login, in tutte le pagine era disponibile la variabile $_SESSION['utente']
    .. bè.. inspiegabilmente non funziona più..

    avete qualche idea del motivo?

    grazie in anticipo
    :ciauz:


  • Consiglio Direttivo

    Hai per caso fatto qualche modifica alla pagina di login nei giorni incriminati?
    o nelle altre pagine? anche non inerente le sessioni? se si, controlla, magari una chiusura fatta male ti manda in frolla le sessioni 😉


  • User

    innanzitutto grazie della risposta 🙂

    no, erano un pò di giorni che non ci lavoravo, quindi mi sembra strano...

    cmq, per esserne assolutamente sicura: cosa intendi per "qualche chiusura fatta male"?
    :mmm:


  • Consiglio Direttivo

    @razima said:

    cosa intendi per "qualche chiusura fatta male"?
    :mmm:
    tag o istruzione a cui manca la chiusura 😉
    Posta il pezzo di codice dove crei la sessione e dove la recuperi


  • User

    non credo perchè le pagine sono molte e funzionano per tutto tranne che per queste cavolo di sessioni..

    cmq

    questo è il codice di login.php
    [php]
    <?
    session_name("utente");
    session_start();

    $email = $_POST['email'];
    $password = $_POST['password'];

    $query = mysql_query("select id from utenti where email='$email' and pass='$password'");
    if(@mysql_num_rows($query) > 0) {
    $_SESSION['idutente'] = mysql_result($query, 0);
    ?><html><head><META HTTP-EQUIV="refresh" content="1;URL=<?= $_SERVER['HTTP_REFERER'] ?>"><body><center><big>Login OK - <?= $_SESSION['idutente'] ?></big></body></html><?
    } else {
    include("../include/header.php");
    ?>
    <p align="center"><h2>Errore</h2></p>
    <p align="center"> Nome utente e/o password errati</p>
    <?
    include("../include/footer.php");
    }
    [/php]fino a qui funziona.. come vedi affianco a login ok gli ho fatto stampare il contenuto di $_SESSION e l'id viene inserito correttamente

    tutte le altre pagine cominciano con
    [php]
    <?
    session_name("utente");
    session_start();

    if($_SESSION['idutente'] > 0) {
    include("headerutenti.php");
    } else {
    include("header.php");
    }

    ......
    ?>

    [/php]e viene sempre incluso header.php
    se faccio print_r($_SESSION); printa un array vuoto.

    quello che mi viene da pensare è che magari l'hosting provider ha cambiato qualche impostazione del php che impedisce a $_SESSION di passare da una pagina all'altra...
    possibile? :mmm:


  • Consiglio Direttivo

    [php]<? $email = $_POST['email'];
    $password = $_POST['password'];

    $query = mysql_query("select id from utenti where email='$email' and pass='$password'");
    if(@mysql_num_rows($query) > 0) {
    session_start();
    session_unset();
    session_destroy();
    session_start();
    $_SESSION['idutente'] = mysql_result($query, 0);
    ....
    }
    ...
    [/php]

    [php]<?
    session_start();
    $idutenti=$_SESSION['idutenti'];
    if ($idutenti!='') {
    include("headerutenti.php");
    } else {
    include("header.php");
    }

    ......
    ?>[/php]
    Prova un po a modificarli così :mmm:


  • User

    niente da fare 😞
    stessa cosa...


  • User

    allora.. sto facendo qualche esperimento..
    ho provato a
    togliere session_name("utente");
    e aggiungere il session_id al redirect
    <META HTTP-EQUIV="refresh" content="1;URL=<?= $_SERVER['HTTP_REFERER'] ?>?<?php echo htmlspecialchars(SID);?>">

    così funziona...

    quello che non capisco è che, sul manuale php leggo
    Printing the SID, like shown above, is not necessary if --enable-trans-sid was used to compile PHP.

    e che
    From PHP 4.2.0, trans-sid feature is always compiled

    io sto usando php 5 e oltre...

    perchè diavolo non funziona?!?!


  • Consiglio Direttivo

    Sinceramente non capisco perchè non funzioni :mmm:

    prova a dare un occhio a headerutenti.php, magari c'è un redirect a header.php che "scappa" per qualche motivo :mmm: