Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Problema con controllo cookie e sessioni

    salve!
    in fase di login creo una variabile di sessione e un cookie.
    poi all'inizio di ogni pagina faccio questo controllo:
    Codice PHP:
    if (!isset($_SESSION['ctrl']) || !isset($_COOKIE['ctrl'])) {
        
    header("location: index.php");

    dove in index.php c'è il form per il login.
    qui faccio il controllo opposto:
    Codice PHP:
    if (isset($_SESSION['ctrl']) || isset($_COOKIE['ctrl'])) {
        
    header("location: home.php");

    al primo accesso alla pagine vengo reindirizzato normalmente a index.php per il login.
    quando eseguo il login viene creata la variabile di sessione e il cookie.
    il problema è che a quel punto rimbalzo tra le due pagine.
    c'è qualche controllo che nn funziona.
    ma nn riesco a capire dov'è il problema.

  2. #2
    il session_start() presumo ci sia prima di leggere $_SESSION...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    si si confermo!!

  4. #4
    Originariamente inviato da fermat
    si si confermo!!
    stampa il $_SESSION ed il $_COOKIE e vedi cosa contengono.

    A parte che non mi sembra troppo logico:

    Codice PHP:
    if (!isset($_SESSION['ctrl']) || !isset($_COOKIE['ctrl'])) {
        
    header("location: index.php");
    }

    // e index.php

    if (isset($_SESSION['ctrl']) || isset($_COOKIE['ctrl'])) {
        
    header("location: home.php");

    se in home non e' settato mandi a index.php,
    se in index e' settato mandi a home.php

    se viene mandato in index perche' non e' settato in home allora potra' mai essere settato in index???

    Direi proprio di no. E poi devono essere presenti/assenti entrambi, cookie e sessione. Occhio anche che il session_start() recupera il cookie di sessione che viene inviato in automatico al browser e quindi non e' quello che indichi con nome ctrl. Se non trova il cookie di sessione apre una nuova sessione. potresti stampare anche il session_id per vedere se corrisponde sempre allo stesso oppure cambia tutte le volte.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    perchè nn è logico?
    ti spiego melgio.
    in home.php (come in altre pagine) ci si accede solo se O la variabile di sessione O il cookie sono settati.
    se nessuno dei due è settato allora vieni rimandato a index.php per fare il login.

    in index.php ci si deve accedere solo se nn si ha fatto il login o il cookie nn è settato.
    in uno di questi due casi invece si viene dirottati in home.php.

    a me sembra un modo usato da qualsiasi sito che richiede l'accesso.
    alla pagina di login in genere nn ci si accede se hai già fatto il login.

    detto ciò ho fatto il login e stampato la variabile di sessione e il cookie, ed entrambi risultano settati.

  6. #6
    ho cercato un pò in giro ma nn sono riuscito a trovare un controllo sul login sia con sessione che con coolie.

    cmq sicuramente sbaglio da qualche parte.
    ma mi sembra che il ragionamento sia giusto.
    qualcuno potrebbe nn volere il cookie o fare pulizia ed usare solo le sessioni per il login.
    quindi io in home.php devo controllare che sia settato il cookie O la variabile di sessione.
    me ne basta solo uno.

    in index.php, dove si deve arrivare solo se si è già loggati, devo controllare che sia già settata la variabile di sessione O il cookie.
    sbaglio qualcosa nella sintassi forse.
    però il ragionamento mi pare giusto.

  7. #7
    se usi una OR nell'if devono essere entrambe TRUE le risposte perche' se una delle due e' false l'if rende FALSE.

    Se l'utente non accetta o cancella i cookie, cancella sia il tuo che il cookie di sessione.

    Verifica (come gia' detto) che il session_id() sia sempre lo stesso ad ogni aperture di session_start(). Se poi vuoi insistere sia con il cookie tuo che con la sessione prova con la seguente logica:

    Codice PHP:
    if (!isset($_SESSION['ctrl']) AND !isset($_COOKIE['ctrl'])) {
        
    header("location: index.php");
        } else { 
    header("location: home.php"); } 
    cioe': se entrambi non sono settati vai a index.php
    altrimenti se uno dei due e' settato oppure sono settati entrambi vai ad home.php

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    l'id l'ho controllato ed è sempre uguale.
    cmq i controlli li devo separare perchè quello che mi rimanda a index è comune a tutti.
    quell'altro invece mi serve solo in index.
    facendo così funziona anche se secondo me nn ha molto senso:
    Codice PHP:
    if (isset($_SESSION['ctrl']) OR isset($_COOKIE['ctrl'])) {
        
    header("location: index.php");
        } else { 
    header("location: home.php");

    Codice PHP:
    if (!isset($_SESSION['ctrl']) AND !isset($_COOKIE['ctrl'])) {
        
    header("location: index.php");
        } else { 
    header("location: index.php");

    cmq, c'è una cosa che nn capisco.
    perchè mi dici di controllare session_id()?

  9. #9
    Originariamente inviato da fermat
    l'id l'ho controllato ed è sempre uguale.

    cmq, c'è una cosa che nn capisco.
    perchè mi dici di controllare session_id()?
    perche' se dovesse cambiare significa che non viene recuperata la sessione ma ne viene aperta una nuova, ovviamente vuota.

    Se non devi gestire in modo particolare l'accesso mi affiderei alle sole sessioni. cioe', eviterei la doppia gestione. o uno oppure l'altro.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    bhe i cookie mi servono perchè devo tenere l'accesso più a lungo.
    il classico ricordami con il menu a tendina per il tempo per intenderci....

    grazie per gli ottimi consigli!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.