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

    Utilizzare i cookie per l'autenticazione?

    Buon pomeriggio, ho questo quesito, è possibile utilizzare i cookie per autenticare gli utenti e per farli navigare con le proprie impostazioni?
    Mi spiego.

    Ho un DB, e nella TB log_psw, sono registrati gli utenti con login e password( criptati )
    Nel momento dell'autenticazione, pensavo di fare cio che segue.
    1) l'utente inserisce login e password..invio i dati con una pagina intermedia (auteticazione.php) che crea il cookie, inserendo al proprio interno, i valori login e password

    2) la pagina autenticazione.php una volta creato il cookie, mi fà accedere, tramite l'header: location., all'index.php.

    3) nell'index.php, recupero i dati dal cookie, e li confronto con quelli del DB.
    4) dopo appositi controlli vado avanti oppure restituisco un messaggio di errore.


    Dopo questa breve descrizione, potete dirmi se è corretto utilizzare i cookie per questo scopo oppure è da evitare?

    NB: nel punto(2) avevo pensato di inserire la login e password criptati, all'interno del cookie, cosi se qualcuno smalizziato, pensa di recuperare i dati, modificando i valori all'interno del cookie e poi reinserirlo nella cache, e fare qualcosa di male, in questo caso non potrebbe o sbaglio?

    Spero abbiate capito....
    grazie mille come sempre....

  2. #2

  3. #3
    sto leggendo questo tutorial:

    http://php.html.it/articoli/leggi/87...tive-in-php/1/

    ho preso la parte dove gestisce le sessioni con file di testo e non con DB.
    Avviando il testo con test_session.php( credo sia questa la pagina per il test, anche eprchè non la indica nel tutorial), purtroppo mi restituisce questo errore:

    Warning: Cannot modify header information - headers already sent by (output started at websites\sessioni\config.inc.php:10) in websites\sessioni\file_session_class.php on line 24

    questa è la test_session.php
    codice:
    <?php
    // inclusione del file che contiene la classe
    require('file_session_class.php');
    
    // Istanziamo l'oggetto
    $my_session = new my_session($session_dir, $session_time, $session_gc_time);
    
    // Aggiorniamo, se necessario, la sessione "allungando la vita" del cookie
    $my_session->my_session_start();
    
    // Inizializziamo l'array che conterrà i dati della sessione
    $_MY_SESSION_VARS = array();
    
    /* Richiamiamo il metodo che ci restituirà le variabili di sessione, e memorizziamo
    le stesse nell'array $_MY_SESSION_VARS; in alternativa avremmo potuto ottenere il
    valore di una sola variabile, specificandone il nome come argomento del metodo */
    $_SESSION_VARS = $my_session->my_session_read();
    
    /* In questo semplice esempio ci limitiamo a stampare a video,
    formattandole, tutte le variabili di sessione registrate,
    ovviamente possiamo farne l'utilizzo desiderato */
    echo '';
    print_r($_SESSION_VARS);
    echo '';
    
    ?>

    questo è quanto contiene config.inc.php
    codice:
    <?php
    // valori espressi in secondi
    $session_time = 0; // durata del cookie
    $session_gc_time = 1800; // tempo per l'esecuzione della garbage collection
    
    /* la directory dove memorizzare i dati della sessione,
    sui sistemi Unix like, deve avere tuti i permessi (777) */
    $session_dir = './test'; // senza slash finale
    ?>

    questo invece file_session_class.php
    codice:
    <?php
    require('config.inc.php');
    
    	class my_session {
    	
    		var $session_dir; // la dir. dove fare lo storage dei dati di sessione
    		var $my_session_id; // l'id di sessione
    		var $session_time; // la durata della sessione
    		var $session_gc_time; // il tempo per la garbage collection
    	
    		//il costruttore della classe, inizializza le variabili
    		function my_session($session_dir, $session_time, $session_gc_time) {
    			$this->my_session_id = (!isset($_COOKIE['my_session_id']))? md5(uniqid(microtime())): $_COOKIE['my_session_id'];
    			$this->file_name = 'sess_' . $this->my_session_id;
    			$this->session_dir = $session_dir;
    			$this->session_time = $session_time;
    			$this->session_gc_time = $session_gc_time;
    		}
    	
    		// avvia o aggiorna la sessione
    		function my_session_start() {
    			$cookie_expire = ($this->session_time > 0) ? (time() + $this->session_time) : 0;
    			if(!isset($_COOKIE['my_session_id'])) {
    				setcookie('my_session_id', $this->my_session_id, $cookie_expire);
    			} 
    			else{
    				if($this->session_time > 0)	setcookie('my_session_id', $this->my_session_id, $cookie_expire);
    			}
    		}
    	
    		// registra le variabili di sessione nel database
    		function my_session_register($name, $value) {
    			$session_name = (!isset($_COOKIE['my_session_id']))	? 'sess_' . $this->my_session_id : $this->file_name;
    			$_MY_SESSION = array();
    			if(file_exists($this->session_dir . '/' . $session_name)) {
    				$_MY_SESSION = unserialize(implode('', file($this->session_dir . '/' . $session_name)));
    				$_MY_SESSION[$name] = $value;
    			} 
    			else {
    				$_MY_SESSION[$name] = $value;
    			}
    			$fp = fopen($this->session_dir . '/' . $session_name, 'wb');
    			fputs($fp, serialize($_MY_SESSION));
    			fclose($fp);
    		}
    	
    		/* legge e restituisce le variabili di sessione
    		(o la singola variabile specificata */
    		function my_session_read($key = '') {
    			if(file_exists($this->session_dir . '/' . $this->file_name)) {
    				$session_vars = unserialize(implode('', file($this->session_dir . '/' . $this->file_name)));
    				return (isset($key) && $key) ? $session_vars[$key] : $session_vars;
    			}
    		}
    	
    		// distrugge la sessione, senza cancellare il cookie
    		function my_session_destroy() {
    			@unlink($this->session_dir . '/' . $this->file_name);
    		}
    	
    		// procedura di garbage collection
    		function my_session_gc() {
    			$d = dir($this->session_dir);
    			while ($entry = $d->read()) {
    				if($entry != '.' && $entry != '..') {
    					if(is_dir($entry)) continue;
    					if(strpos($entry, 'sess_') !== FALSE) {
    						if((filemtime($this->session_dir . '/' .$entry) + $this->session_gc_time) < time()) {
    							@unlink($this->session_dir . '/' .$entry);
    						}
    					}
    				}
    			}
    		$d->close();
    		}
    	
    	}
    
    ?>

    Sapete dirmi perchè mi restituisce quell'errore?
    Grazie mille.....

  4. #4
    headers already sent by (output started at websites\sessioni\config.inc.php:10
    Il file websites\sessioni\config.inc.php invia dei dati al buffer d'uscita. Elimina qualsiasi spazio/ritorno a capo/tabulazione (etc.) dopo ?>

  5. #5
    ti ringrazio, fatto, ma potevo ovviare, anche con:

    codice:
    //serve per ovviare all'header sottostante
    //ob_start();
    //tutto il codice seguente....
    purtroppo non capisco adesso, come mai non mi crea il file di sessione nel senso.
    Se guardi questa porzione di codice, crea il file di sessione all'interno della cartella test.
    codice:
    /* la directory dove memorizzare i dati della sessione,
    sui sistemi Unix like, deve avere tuti i permessi (777) */
    $session_dir = './test'; // senza slash finale
    Ho creato la cartella al difuori di quella sessioni, dove ho tutti i file compreso quello del test_session.php, ma ho visto che non mi crea nulla..
    Sai anche qui perchè non lo fa?

    Grazie ancora...

  6. #6
    allora, avevo un sito dove era settato session_start() all'inizio della pagina.
    Rimettendolo in moto, sul web server, ho visto che:
    1) crea un file di sessione nella cartella tmp del webserver con queste caratteristiche:
    1.1) nome del file di sessione: sess_ee29380213a526fc7454b5c8019eb857
    1.2) all'interno ci sono questi valori: email_news|s:0:"";

    2) crea, nella cache del Browser, il cookie con queste caratteristiche:
    2.1) nome del cookie: cookie:mionome@localhost
    2.2) il contenuto è il seguente:
    SN_miosito\n0\nlocalhost/\n1088\n2246769664\n30028491\n253226848\n29919862\ n*


    Adesso ti chiedo, come utilizzo la sessione per l'autenticazione?
    Come sempre con login e password?

    All'inizio della pagina che contiene il form per l'invio dei dati, inserisco
    codice:
    <?php session_start();?>
    //devo inserire altro?
    poi nelle pagine successive?come mi comporto?
    Grazie mille...
    NB: ti prego, se puoi essere esplicito nella spiegazione, perchè "se non vedo", non capisco..

  7. #7
    sto provando questo script ma non mi crea una mazza...ne cookie ne file di sessione.
    Dov'è l'errore?
    Oddio sto andando in confusione..aiutooo!!!
    codice:
    <?php 
    	//dati per il login 
    	$login_user=$_POST['posted_username']; 
    	$pass_user=$_POST['posted_password']; //passwd="prova" 
    	$redirect="http://localhost/websites/sessioni_TXT/login.php"; 
    	 
    	//gestione della sessione nel caso in cui i cookie sono disabilitati 
    	if(isset($_POST['PHPSESSID']) && !isset($_COOKIE['PHPSESSID'])) 
    	{ 
    		$PHPSESSID=$_POST['PHPSESSID']; 
    	  	header("Location: $redirect?PHPSESSID=$PHPSESSID"); //si ricarica la pagina di login 
    	} 
    	 
    	session_start(); //si inizia o continua la sessione 
    	 
    	//controllo user e passwd da login 
    	if(isset($_POST['posted_username']) && isset($_POST['posted_password'])) 
    	{ 
    		if($login_user==($_POST['posted_username']) && $pass_user==md5($_POST['posted_password'])) 
    			$_SESSION['user']=$_POST['posted_username']; 
    	} 
    	 
    	//creazione cookie per login automatico 
    	if(isset($_POST['ricorda']) && isset($_SESSION['user'])) 
    	{ 
    		$cok=md5($login_user)."%%".$pass_user; 
    	  	setcookie("sav_user",$cok,time()+31536000); 
    	} 
    	 
    	//logout 
    	if($_GET['logout']==1) 
    	{ 
    		$_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 
    			setcookie("sav_user",$cok,time()-31536000); 
    		  	header("Location: $redirect"); //si ricarica la pagina di login 
    		  	exit; //si termina lo script in modo da ritornare alla schermata di login 
    	} 
    	 
    	//controllo user e passwd da cookie 
    	if(isset($_COOKIE['sav_user'])) 
    	{ 
    		$info_cok=$_COOKIE['sav_user']; 
    	  	$cok_user=strtok($info_cok,"%%"); 
    	  	$cok_pass=strtok("%%"); 
    	  	setcookie("sav_user",$info_cok,time()+31536000); 
    	 
    		if($cok_user==md5($login_user) && $cok_pass==$pass_user) 
    			$_SESSION['user']=$login_user; 
    	} 
    	 
    	//caso in cui si vuole ricordare il login, ma i cookie sono off 
    	if(!isset($_COOKIE['PHPSESSID']) && isset($_POST['ricorda'])) 
    		header("Location: $redirect?nocookie=1"); 
    ?> 
    <HTML> 
    	<HEAD> 
    	</HEAD> 
    	<BODY> 
    	<?php 
    	 
    	$PHPSESSID=session_id(); 
    	 
    	if(!isset($_SESSION['user'])) //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=\"login.php\"> 
    						username: <INPUT TYPE='TEXT' SIZE='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\">
    "); 
    	 
    		if(!isset($_COOKIE['PHPSESSID'])) //i cookie sono off, dobbiamo propagare noi il PHPSESSID 
    			print("<INPUT TYPE='HIDDEN' NAME='PHPSESSID' VALUE='$PHPSESSID'>"); 
    			print("</FORM>"); 
    	} 
    	else //siamo loggati pagina riservata 
    	{ 
    		$username=$_SESSION['user']; 
    		print("Il tuo ID ?: $PHPSESSID 
    
    "); 
    		print("Sei loggato come: $login_user
    
    "); 
    		print("<A HREF=\"login.php?logout=1\">logout</A>"); 
    	} 
    ?> 
    </BODY> 
    </HTML>

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 © 2024 vBulletin Solutions, Inc. All rights reserved.