Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150

    Sessioni e variabili superglobal

    Ciao a tutti, ho un problema con le sessioni.
    Saro' un po lunghetto pero' non esiste altra maniera per spiegare il tutto.

    Sto costruendo un sito in php comprensivo di db, creato in mysql.
    Il sito prevede una sessione di login e registrazione inizialmente.
    Il db prevede due tabelle, una per gli utenti e una per la registrazione delle sessioni.

    Allora nel file home.php avro':

    <form method ="post" action ="login.php">

    Il form contiene nome e password dell'utente registrato, che saranno inviati al file login.php .
    Nel file login.php ho i vari controlli: come prima cosa mi connetto al db, verifico che i dati inseriti e passati tramite il file home.php siano nel db.
    Se non ci sono risultati esco con un messaggio di utente non registrato.

    Se invece l'utente risulta nella tabella inizia il problema.

    Fino a questo punto, ovvero finche' nessuno e' loggato non ha senso mettere un session_start () giusto?

    La mia idea era di inserirlo nel seguente modo: dopo aver fatto il controllo sopra descritto, entro nell'if:

    if (se sei amministratore)
    {
    $_SESSION ['codice']= microtime();
    $valore= $_SESSION ['codice'];

    mysql_db_query ($db_name, "INSERT INTO Sessioni (sid) VALUES ('$valore'") or die ("Errore nell'inserimento");
    setcookie ("cookie", $valore);
    Header ("Location: admin.php");
    }
    else
    {

    "sei un utente"

    Concentradomi sulla prima graffa, ho varie domande:
    1)ho usato in modo corretto $_SESSION?
    2)la mia idea era quella di inserire nella tabella Sessioni e in un cookie , il mio $_SESSION ['codice'] e lo username dell'utente .
    Fin ora c'e qualche errore macroscopisco? Di sicuro penso di si perche' non mi funziona la query di inserimento e non capisco perche'. Ho fatto errori di sintassi?
    Inoltre l'assegnamento di $valore ha senso?

    3)fin qui non ho avviato nessuna sessione.
    E' corretto farla partire poi nel file admin.php che sara' cosi:

    <?php


    include "config.php";
    include "top_foot.php";

    session_start();

    if(isset($_SESSION['codice']))
    {
    "Faccio le operazioni per l'utente loggato"
    }
    else
    {
    "Do errore perche' non e' settata la variabile di sessione"
    }


    ?>


    Mi servirebbe proprio un vostro aiuto, spero di essere stato chiaro.


    ciao

  2. #2
    Fino a questo punto, ovvero finche' nessuno e' loggato non ha senso mettere un session_start () giusto?
    Se utilizzi le sessioni per verificare se l'utente sia loggato o meno, http://www.php.net/session_start è necessario in ogni pagina in cui fai il controllo.

    setcookie ("cookie", $valore);
    Header ("Location: admin.php");
    Per effettuare un redirect in una pagina che manipola le sessioni DEVI richiamare http://www.php.net/session_write_close ed aggiungere il session id all'URL. Per rispettare l'RFC l'URL deve essere assoluto. In certe configurazioni, http://www.php.net/setcookie e http://www.php.net/header location non funziona.

    non mi funziona la query di inserimento e non capisco perche'.
    http://www.php.net/mysql_error

    3)fin qui non ho avviato nessuna sessione.
    Utilizzare $_SESSION senza http://www.php.net/session_start è inutile e non porta alla persistenza delle informazioni.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    150
    Non mi e' molto chiaro perche' dovrei usare il session_wirte_close.

    Una cosa del genere andrebbe bene?

    codice:
    <?php
    
    /**
     * @author 
     * @copyright 2008
     */
    
    include "config.php";
    
    $username = $_POST ['usrname'];
    $password = $_POST ['pwd'];
    
    
    
    $db = mysql_connect ($db_host, $db_user, $db_password);
    
    if ($db == FALSE)
    die ("Errore nella connessione del database.");
    
    mysql_select_db ($db_name, $db);
    
    
    session_start();  //inizio o continuo la sessione
    
    
    $query ="SELECT id_usr, username, password, fullname, email, administrator, enabled FROM Users WHERE username ='$username' AND password ='$password'";
    $result=mysql_query ($query, $db);
    
    
    if ($num_righe = mysql_num_rows ($result))   //resistuisce il numero di righe in un risultato
    
    	while ($row=mysql_fetch_array ($result)) //mysql_fecth_array carica una riga del risultato come un array associativo,un array numerico o ent
    	{
    		if ($row[administrator]=='1')
    		{
    			$_SESSION ['codice']= microtime();
    			$valore= "$_SESSION ['codice']|$username";
    			mysql_db_query ($db_name, "INSERT INTO Sessioni (sid, user) VALUES ('$valore', '$username')");
                            Header ("Location:Admin.php");
    E nella pagina admin.php inizio cosi':
    codice:
    <?php
    
    
    include "config.php";
    include "top_foot.php";
    
    session_start();
    //mi connetto alta tabella Sessioni nel mio db e risalgo 
    if(isset($_SESSION['codice'])&& $_SESSION['codice']== "al valore sid estratto dal db")
    {
        Utente loggato e continuo la pagina
    }
    else
    {
        Utente non registrato
    }
    
    
    ?>
    Va bene cosi?
    Lo migliorereste in qualche modo voi?

    ciao e grazie per la risposta di prima

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.