Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Login e sessioni

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398

    Login e sessioni

    C'e' qualcosa che non afferro ho preso uno script da questo link
    http://www.siforge.org/articles/2003...sioni_php.html

    E l'ho modificato secondo le mie esigenze e funziona cosi a prima vista pero non ho capito
    la storia di dover passare il PHPSESSID manualmente se i COOKIES sono disabilitati.

    Io devo propagare questa variabile di default in tutte le pagine del sito che mi interessano ?

    Un altra cosa che non mi e' chiara come si fa con le sessioni a far scadere la login dopo
    un tempo prestabilito senza dover andare a configurare il php.ini.

    Io vorrei che dopo un ora si dovesse rieffettuare la login.
    Ma sono certo di fare confusione tra i COKKIES e le SESSIONI :/

    Mi sono letto molte cose ma ... boh sono dubbioso

    Andrea

  2. #2
    E l'ho modificato secondo le mie esigenze e funziona cosi a prima vista pero non ho capito
    la storia di dover passare il PHPSESSID manualmente se i COOKIES sono disabilitati.

    Io devo propagare questa variabile di default in tutte le pagine del sito che mi interessano ?
    La devi propagare in tutte le pagine che utilizzano le sessioni. Puoi anche istruire PHP di farlo per te utilizzando la direttiva session.use_trans_sid.

    Un altra cosa che non mi e' chiara come si fa con le sessioni a far scadere la login dopo
    un tempo prestabilito senza dover andare a configurare il php.ini.
    Puoi utilizzare http://www.php.net/ini_set per impostare la direttiva session.cookie_lifetime oppure puoi utilizzare http://www.php.net/session_set_cookie_params . Tutto questo prima di avviare la sessione.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Grazie ho capito di più e mi sa che utilizzerò l'invio del PHPSESSID in automatico
    ma giusto per capire bene.

    Mettiamo che io abbia una sessione e non abbia i COOKIE attivi questa propagazione del PHPSESSID
    puo avvenire in qualsiasi modo ?
    sia con POST se utilizzo form o con metodo GET se e' un semplice link ?

    e mettiamo che sia cosi questo vuol dire aggiungere a tutti i link delle pagine interne il SESSID ?
    o ci sono metodi piu comodi tralasciando l'automatismo ovviamente


    Andrea

  4. #4
    Mettiamo che io abbia una sessione e non abbia i COOKIE attivi questa propagazione del PHPSESSID puo avvenire in qualsiasi modo ?
    sia con POST se utilizzo form o con metodo GET se e' un semplice link ?
    Sia con POST che con GET.

    e mettiamo che sia cosi questo vuol dire aggiungere a tutti i link delle pagine interne il SESSID ?
    A tutti i link e le form etc.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Grazie ancora un ultima domanda poipenso di aver capito tutto
    nello script che sto modificando
    http://www.siforge.org/articles/2003...sioni_php.html

    non riesco proprio a capire cosa servono le righe dalla 7 alla 12

    Che senso ah fare un redirect per avere il phpsessid nel _GET se l'hai gia nella variabile_POST ?


    Andrea

  6. #6
    Che senso ah fare un redirect per avere il phpsessid nel _GET se l'hai gia nella variabile_POST ?
    Non ha alcun senso, inoltre vengono persi i dati del post a causa del redirect.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Ok dopo 2 giorni di studi ho fatto il seguente codice che sembra andare sia con sia senza cookies
    lo posto sperando che sia utile poi se c'e' qualche buon sammaritano che controlla
    che non abbia scritto delle cavolate sopratutto per quanto riguarda i problemi di sicurezza.


    Ho creato un file login.php
    con le funzioni
    check_user che controllano sul db login e passowrd e se corretti aprano la sessione e nel caso ci sia la var remember anche i cookies di autologin
    check_logged che ritorna 1 se si e' loggati 0 se non lo si e nel caso ci siano cookies di auto login rieffettua il login
    logout che chiude la sessione e i cokkies di autologin

    form_sessid che va messo dentro tutte le form per la propagazione dell'id di sessione se serve
    link_sessid che aggiunge in fonda ai link la sessid se serve

    Codice PHP:

    <?php

    function check_user ($login $password$remember 0) {
        global 
    $sql_usertable;
        if (
    strlen($login) == or strlen ($password) == 0) {
            return 
    0;
        }

        
    $sql="SELECT * FROM $sql_usertable WHERE login='$login'";
        
    $result=mysql_query($sql)or die("Query non valida: " mysql_error());

        if (
    mysql_num_rows($result) != 1) {
            return -
    1;
        }

        
    $riga mysql_fetch_assoc($result);

        if (
    $riga['pwd'] != md5($password)) {
            return 
    0;
        }
        else {
            
    $_SESSION['user']=$login;
            
    $_SESSION['user_id']= $riga['id'];
            
    $_SESSION['user_perm'] = $riga['perm'];
            
    //creazione cookie per login automatico 
            
    if($remember == 1) { 
                
    $cok=md5($login_user)."%%".$pass_user
                
    setcookie("sav_user",$cok,time()+31536000); 
            }
            return 
    1;
        }
    }

    function 
    check_logged()  {
        
    // se esiste la session user sono loggato
        
    if (IsSet($_SESSION['user'])) {
            return 
    1;
        }
        
    //controllo user e passwd da cookie 
        
    if(IsSet($_COOKIE['sav_user'])) { 
            
    $info_cok=$_COOKIE['sav_user']; 
            
    $cok_user=strtok($info_cok,"%%"); 
            
    $cok_pass=strtok("%%"); 
            return 
    check_user ($cok_user $cok_pass 1);
        }
        return 
    0;
    }

    function 
    logout($headerredirect) {
        
    $_SESSION=array(); // Desetta tutte le variabili di sessione. 
        
    session_destroy(); // DISTRUGGE la sessione. 
        
    if(IsSet($_COOKIE['sav_user'])) { //se presente si distrugge il cookie di login automatico 
            
    $info_cok=$_COOKIE['sav_user'];
            
    setcookie("sav_user",$info_cok,time()-31536000);
        }
        
    header("Location: $headerredirect"); //si ricarica la pagina di login 
        
    exit; //si termina lo script in modo da ritornare alla schermata di login 
    }

    function 
    form_sessid() {
        if(!IsSet(
    $_COOKIE['PHPSESSID'])) {//i cookie sono off, dobbiamo propagare noi il PHPSESSID 
            
    $sessid=session_id();
            print(
    "<input type=\"hidden\" name=\"PHPSESSID\" value=\"$sessid\" />");
        }
        return 
    0;
    }

    function 
    link_sessid($link)  {
        if(!IsSet(
    $_COOKIE['PHPSESSID'])) {//i cookie sono off, dobbiamo propagare noi il PHPSESSID 
            
    $sessid=session_id();
            
    $pos strpos($link"?");
            if (
    $pos === false)
                
    $links .= $link.'?PHPSESSID='.$sessid;
            else
                
    $links .= $link.'&PHPSESSID='.$sessid;
            return 
    $links;
        }
        return 
    $link;
    }

    ?>


    poi ho creato in index che utilizza il sopracitato modulo in questo modo
    Codice PHP:
    <?php

    //dati login da modificare
    $redirect="http://localhost/index.php"
    $sql_host "localhost";
    $sql_dbname "my_db";
    $sql_usertable "user";
    $sql_user "myuser";
    $sql_pwd "";

    include 
    'login.php';

    session_start(); //si inizia o continua la sessione

    //logout 
    if($_GET['logout']==1)  { logout($redirect); }

    mysql_connect("$sql_host""$sql_user""$sql_pwd")or die("Non e' possibile connettersi al server SQL");
    mysql_select_db("$sql_dbname")or die("non e' possibile selezionare il database");


    //controllo user e passwd da login 
    if(IsSet($_POST['posted_username']) && IsSet($_POST['posted_password']))  { 
        
    $logged check_user ($_POST['posted_username'], $_POST['posted_password']);
    } else {
        
    $logged check_logged();
    }

    ?>

    <html> 
    <head> 
    </head> 
    <body> 

    <?php 

    if($logged != 1) { //non siamo loggati, pagina di login 
        
    if($_GET['nocookie']==1) { //i cookie sono off e si vuole ricordare il login 
            
    print("Spiacente, ma con i cookie disabilitati non posso fare i miracoli ;)
     
            Attivali se vuoi ricordare il tuo login.
    "
    ); 
        }

        print(
    "

     <form method=\"post\" action=\"
    $redirect\">
            username: <input type=\"text\" sixe=\"20\" name=\"posted_username\">

            password: <input type=\"password\" size=\"20\" name=\"posted_password\">
     
            ricordami: <input type=\"checkbox\" name=\"ricorda\" value=\"1\">

     
            <INPUT TYPE=SUBMIT NAME=SUBMIT VALUE=\"Loggami\">
    "
    ); 
        
    form_sessid(); // se c'e' bisogno mette il PHPSESSID se no nada
        
    print("</form>"); 
    }
    else {
    //siamo loggati pagina riservata 
        
    $username=$_SESSION['user']; 
        
    $permlevel=$_SESSION['user_perm'];
        print(
    "Il tuo ID ?: $PHPSESSID 

    "
    ); 
        print(
    "Sei loggato come: $username

    "
    ); 
        print(
    "I tuoi permessi: $permlevel

    "
    ); 
        
    $pag2link link_sessid("pagina2.php"); // se c'e' bisogno aggiunge l'id se no il link rimane invariato
        
    print("<a href=\"$pag2link\">pagina2</a>
    "
    ); 
        print(
    "<a href=\"$redirect?logout=1\">logout</a>"); 
    }
    ?> 

    </body> 
    </html>

    infine una pagina secondaria che ho chiamato pagina 2 che utlilizza le mie comodissime funzioni

    Codice PHP:
    <?php
    //dati login da modificare
    $redirect="http://localhost/index.php"
    $sql_host "localhost";
    $sql_dbname "my_db";
    $sql_usertable "user";
    $sql_user "myuser";
    $sql_pwd "";

    include 
    'login.php';



    session_start(); //si inizia o continua la sessione

    mysql_connect("$sql_host""$sql_user""$sql_pwd")or die("Non e' possibile connettersi al server SQL");
    mysql_select_db("$sql_dbname")or die("non e' possibile selezionare il database");

    $logged check_logged();

    ?>

    <html> 
    <head> 
    </head> 
    <body> 

    <?php 

    if($logged != 1) { //non siamo loggati, pagina di login
        
    echo "non sei loggato vai alla pagina di login";
        exit();
    }
    else {
    //siamo loggati pagina riservata 
        
    $username=$_SESSION['user']; 
        
    $permlevel=$_SESSION['user_perm'];
        print(
    "Il tuo ID ?: $PHPSESSID 

    "
    ); 
        print(
    "Sei loggato come: $username

    "
    ); 
        print(
    "I tuoi permessi: $permlevel

    "
    ); 
        print(
    "<a href=\"$redirect?logout=1\">logout</a>"); 
    }

    ?> 

    </body> 
    </html>

  8. #8
    scusa, ma questo codice
    Codice PHP:
    $cok md5($login_user)."%%".$pass_user
    da dove prende le variabili $login_user e $pass_user?

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.