• User Newbie

    [$_SESSION] errore su login utenti

    Ciao a tutti,
    vi scrivo per segnalarvi un comportamento strano del mio server (probabilmente a causa di un mio errore) nel momento in cui proteggo alcune pagine del mio sito utilizzando la variabile $_SESSION.
    Com'è comune, sfrutto la variabile per memorizzare l'autorizzazione dell'utente a navigare in determinate pagine protette: il problema è che la sessione non rimane memorizzata e in ogni pagina mi richiede l'inserimento credenziali.

    Ecco gli script:

    index.php: semplice form di ingresso
    [html] <form method="post" action="home_page.php">
    <table width="354" border="0" cellspacing="3" cellpadding="0">
    <tr>
    <td width="102">Nome utente:</td>
    <td width="243"><label>
    <input type="text" name="username" />
    </label></td>
    </tr>
    <tr>
    <td>Password:</td>
    <td><input type="password" name="password" /></td>
    </tr>
    </table>
    <label>
    <input type="submit" value="Invia" />
    </label>
    <input type="reset" value="Ripristina" />
    </form>[/html]home_page.php: la prima pagina protetta. Qui mi fa entrare correttamente
    [php]<?php require 'secure.inc.php'; ?><!DOCTYPE html PUBLIC...[/php]secure.inc.php:
    [php]<?php
    require_once 'access.inc.php';
    if (!loggedIn()) {
    include 'index.php';
    exit;
    }
    ?>[/php]access.inc.php
    [php]<?php
    require_once 'config.inc.php';

    function loggedIn()
    {
    return isset($_SESSION['authorized']);
    }

    // Processa il tentativo di login
    if (isset($_POST['username'])) {
    if($_POST['username'] == ADMIN_USER and
    $_POST['password'] == ADMIN_PASS) {
    $_SESSION['authorized'] = TRUE;
    }
    }

    // Processa il logout
    if (isset($_REQUEST['logout'])) {
    unset($_SESSION['authorized']);
    }
    ?>[/php]config.inc.php: inserisco le variabili pwl e nome utente
    [php]<?php
    define('ADMIN_USER', 'bandrea');
    define('ADMIN_PASS', 'bandrea');
    ?>[/php]Il problema consiste nel fatto che il login funziona perfettamente, ma non viene memorizzata la sessione. Una volta entrato in home_page.php quando provo a cliccare su qualsiasi altra pagina protetta mi ridà la schermata di login, come se non fossi mai entrato.
    Suppongo che quindi non venga memorizzata la sessione.. potrebbe essere un problema del setting del server?

    Ecco il mio PHP.INI, sezione SESSION:

    session

    Session Support enabled Registered save handlers files user Registered serializer handlers php php_binary wddx
    DirectiveLocal ValueMaster Value session.auto_startOffOff session.bug_compat_42OnOn session.bug_compat_warnOnOn session.cache_expire180180 session.cache_limiternocachenocache session.cookie_domainno value**no value session.cookie_lifetime00 session.cookie_path// session.cookie_secureOffOff session.entropy_fileno value**no value session.entropy_length00 session.gc_divisor100100 session.gc_maxlifetime14401440 session.gc_probability00 session.hash_bits_per_character44 session.hash_function00 session.namePHPSESSIDPHPSESSID session.referer_checkno value**no value session.save_handlerfilesfiles session.save_path/var/lib/php5/var/lib/php5 session.serialize_handlerphpphp session.use_cookiesOnOn session.use_only_cookiesOffOff session.use_trans_sid00

    Ringrazio chiunque riesca a darmi una soluzione al problema!

    Alessandro


  • ModSenior

    Ciao mwdesign,

    hai messo session_start(); in tutte le pagine?


  • User Newbie

    Eheh.. problema risolto, grazie 😉 era proprio quella funzione che non avevo inserito..

    Un consiglio TheDarkita: nella progettazione di pagine ad accesso protetto e dal punto di vista di una buona programmazione, la sessione dovrebbe essere terminata secondo un intervallo di tempo oppure posso lasciarla aperta?
    Indipendentemente da tutto, qual'è la miglior procedura (e quindi la più sicura) per gestire gli accessi a pagine protette tramite $_SESSION?

    Grazie 😉


  • ModSenior

    La sessione dopo tot tempo che non si visualizza una pagina viene distrutta automaticamente (Di default mi pare sia circa 27 minuti).
    Dal punto di vista sicurezza va benissimo cosi, con isset.