Reindirizzamento a ogni diversa cartella per ogni utente

Giuseppe Calabro'

Nuovo Utente
15 Mar 2013
15
0
0
Salve,
Sono dei giorni che mi sbatto con questo dilemma, premetto che sono un novello, sto cercando di reindirizzare ogni utente che si logga alla sua cartella sul web dove all'interno c'è una pagina php con il nome privato.php.

esempio: persona x, inserisce il suo username e la sua password, clicca accedi, si apre il file config.php, il file connessione_db.php e infine il file verifica.php, verifica che le credenziali sono ok e indirizza al file privato.php

Fino a qui ci sono mi fuonziona! forse c'è un problema con la sicurezza, cioè il file è accessibile anche direttamente scrivendolo dal link.

ora però io vorrei esempio creare una cartella con l'username o l'id della persona x, e all'interno il file privato.php che lui può solo guardare. non ha permessi per modificare o altro. solo guardare (deve vedere se la sua pratica è in lavorazione o in stallo o altro)

io pensavo che ci fosse una qualche funzione che dice se il login a successo, ti reindirizzo alla cartella che ha lo stesso valore di username e all'interno c'è il file che è ha il nome uguale per tutti o ancora meglio che ha il nome uguale al suo id.

Volevo anche dire che in questo sito non vi è la registrazione, che i benificiari di questo sistema dopo aver stipulato un mandato gli verranno fornite le credenziali che io aggiungerò nel database, successivamente aggiungerò la cartella con il username e il relativo file privato.php modificato opportunamente per visualizzare solo quello di cui è stato accordato. quando il mandato verrà concluso eliminerò il tutto.

Spero di aver detto tutto, non mi mangiate vi prego!
 
Puoi lavorare con le variabili di sessione, seguendo questo flusso:

  1. Quando l'utente invia il modulo con la propria user /password, verifichi che i dati siano corretti
  2. Se i dati sono corretti, lo invii nella pagina con il suo username
  3. In questa pagina, per evitare che entrino altre persone non autorizzate, esegui un controllo di sessione
Il controllo di sessione avrà questa sintassi (ipotizzando che l'username sia pippo e quindi il file sia dentro pippo/privato.php):

PHP:
if($_SESSION['username'] != 'pippo'){
die('non sei autorizzato.');
}
 
Fino a qui ok, però che succede se ho 20 diverse persone? che andranno tutti a quella pagina li.
Ma facendomi il controllo della pagina solo 1 persona avrà l'acesso.
io invece volevo creare:

host:
www. (cartella principale dove c'è il sito internet e i file di login, verifica ecc)
|
[sottocartella]Giuseppe
| |
| [file]Privato.php
|
[sottocartella]Francesco
| |
| [file]Privato.php

ecc
Ora quando L'utente Giuseppe con la password 12345 accede il file verifica controllerà se sul database nella tabella utenti vi è la corrispondenza e mi indirizza alla Sottocartella Giuseppe al file Privato.php. Io volevo creare quindi una connessione tra l'username che viene inserito e la cartella che avrà quell'username quindi mi aprirà il file che ha il nome Privato.php uguale per tutti ma che chiaramente ha a schermo cose diverse.
 
Da quanto ho capito, la cartella la crei tu (via ftp suppongo) vero?

A quel punto, ogni utente andrà verso quella con il suo username.

Se una persona si logga come pippo, avrai nella pagina di login questo codice

PHP:
$_SESSION['username'] = $_POST['username'];
header("Location: ".$_SESSION['username']."/privato.php");
die();

se uno si logga come pippo, andrà in pippo/privato.php, chi come pluto andrà in pluto/privato.php e via dicendo.
ricordati di lanciare session_start() ad inizio file.
 
Ho provato come dici tu e mi risponde così:

Giuseppe Warning: Cannot modify header information - headers already sent by (output started at /htdocs/public/www/verifica.php:36) in /htdocs/public/www/verifica.php on line 37
 
ciao
poi in ogni file riservato affinche non sia raggiungibile da un link diretto (es) digitando sul bw
www . tuo_sito.it /Giuseppe /privato.php (metto degli spazi perche non si formo il link)
metti il
PHP:
<?php
session_start();
if(!isset($_SESSION['username'])){
	header("location=index.php");//o altro url a cui vuoi riinviare
	exit();
}
//eccetera....... dati del privato....
?>
 
Ora ho un altro inconveniente quando faccio il logout, volevo rimandare la persona alla index principale che si trova nella cartella principale. Ma con questo codice:

header("location: index.html?msg=$msg");

mi dice che non lo trova perche come noto me lo cerca nella sottocartella Giuseppe/index.html e non nella cartella primaria.

lo so sono un nabbo ma che ci posso fare. Sarà un mesetto che ho iniziato a studiarci su.
 
ciao
prova
PHP:
header("location: ../index.html?msg=$msg");
oppure col percorso assoluto
PHP:
header("location: http://tuo_sito.it/index.html?msg=$msg");
 
Grazie ragazzi siete gentilissimi... ultima cosa davvero.

ho un problema con l'accesso diretto alla pagina.

Ho provato ma mi crea un problema... cioè funziona che non mi fa entrare diretto ma allo stesso tempo non mi fa entrare nemmeno con il login...
 
ciao
quando fail login e dopo la verifica dell'user e pass se questa è ok (e solo se ok) devi valorizzare la sessione $_SESSION['username'] con l'username dell'utente
 
Penso di non aver capito dov'è l'errore.

file privato.php:

PHP:
<?php
session_start();
//se non c'è la sessione registrata
if (isset($_SESSION['autorizzato'])) {
  echo "<h1>Area riservata, accesso negato.</h1>";
  echo "Per effettuare il login clicca <a href=' ../login.php'><font color='blue'>qui</font></a>";
  die;
} else {
 
//Altrimenti Prelevo il codice identificatico dell'utente loggato

$cod = $_SESSION['cod']; //id cod recuperato nel file di verifica
}
?>

Questo invece è il file verifica.php

PHP:
<?php
session_start(); //inizio la sessione
//includo i file necessari a collegarmi al db con relativo script di accesso
include("connessione_db.php");
include("config.php");
 
//mi collego
mysql_select_db("$db_name",$connessione);
 
//variabili POST con anti sql Injection
$username=mysql_real_escape_string($_POST['username']); //faccio l'escape dei caratteri dannosi
$password=mysql_real_escape_string(sha1($_POST['password'])); //sha1 cifra la password anche qui in questo modo corrisponde con quella del db
 
 $query = "SELECT * FROM login WHERE username = '$username' AND password = '$password' ";
 $ris = mysql_query($query, $connessione) or die (mysql_error());
 $riga=mysql_fetch_array($ris); 
 
/*Prelevo l'identificativo dell'utente */
$cod=$riga['username'];
 
/* Effettuo il controllo */
if ($cod == NULL) $trovato = 0 ;
else $trovato = 1; 
 
/* Username e password corrette */
if ($trovato === 1) {
 
 /*Registro la sessione*/
  $_SESSION['autorizzato'] = 1;
 
  /*Registro il codice dell'utente*/
  $_SESSION['cod'] = $cod;
 
 /*Redirect alla pagina riservata*/
  $_SESSION['username'] = $_POST['username'];
  header("Location: ".$_SESSION['username']."/privato.php");
   		
} else {
 
/*Username e password errati, redirect alla pagina di login*/
 echo '<script language=javascript>document.location.href="login.php"</script>';
 
}
?>
 
Ultima modifica di un moderatore:
ciao
che errore ti da?
poi radcchiudi sempre ol codice tra gli appositi tag (seconda riga formattazione del post ultime tre iconcine nell'ordine CODE HTML PHP)
 
Se faccio l'accesso diretto non mi fa entrare... perfetto
ma se faccio l'accesso con password e username non mi fa entrare ancora... esce la stessa schermata come nell'accesso diretto...
 
ciao
ti ho messo un po' apposto, leggi i commenti.
provalo e sappimi dire
PHP:
<?php
session_start(); //inizio la sessione
if(trim($_POST['username'])!="" || trim($_POST['password']!="")){//prima verifica che non siano vuoti
	//inutile collegarsi prima se uno o entrambi vuoti
	require_once("connessione_db.php");//è meglio il require
	require_once "config.php");
	//mi collego
	mysql_select_db($db_name,$connessione) or die (mysql_error());;
	//variabili POST con anti sql Injection
	$username=mysql_real_escape_string($_POST['username']); //faccio l'escape dei caratteri dannosi
	$password=mysql_real_escape_string(sha1($_POST['password'])); //sha1 cifra la password anche qui in questo modo corrisponde con quella del db
	$ris = mysql_query($query, $connessione) or die (mysql_error());
	//verifico che esista la combinazione user pass
	if(mysql_num_rows($ris)>0){//se maggiore di zero esiste oppure mysql_num_rows($ris)==1
		$riga=mysql_fetch_array($ris);
		$cod=$riga['username'];
		$_SESSION['autorizzato'] = 1;//è un sovrapiù
		$_SESSION['username']=$cod;
		//Registro il codice dell'utente
		//$_SESSION['cod'] = $cod;// ???? a che ti serve hai gia la session username
		header("Location: ".$_SESSION['username']."/privato.php");
		exit();
	}
}
header("Location:login.php");
/*
se vuoi invire un messaggio di errore puoi
$err="non hai inserito l'username o la password, non sei autorizzato ad entrare";
header("Location:login.php?err=$err");
che visualizzerai nella login.php
*/
exit();
?>
poi nella privato.php
PHP:
<?php
session_start();
//se non c'è la sessione registrata
if (!isset($_SESSION['autorizzato'])){// ti eri dimenticato un ! - poi puoi mettere !isset($_SESSION['username']
	//evita di far vedere qualcosa a chi non è autorizzato
	//echo "<h1>Area riservata, accesso negato.</h1>";
	//echo "Per effettuare il login clicca <a href=' ../login.php'><font color='blue'>qui</font></a>";
	//die;
	//se vuoi dare un messaggio usa lo stesso sistema che ti ho messo nel login
	$err="per accedere devi essere loggato";
	header("Location:../login.php?err=$err");
	exit();
}else{
	//il log è andato a buon fine
	echo "<h3>benvenuto ".$_SESSION['username']."nella tua pagina riservata</h3>"
	//ecc.......
	// e queste a cosa ti servono??
	//Altrimenti Prelevo il codice identificatico dell'utente loggato
	$cod = $_SESSION['cod']; //id cod recuperato nel file di verifica
}
?>

poi studia la classe PDO per le interrogazioni al db le vecchie query sono deprecate anche se per ora funzionano
 
Ciao allora ho sistemato degli errorini di battitura sicuramente per la velocità! ma ti ringrazio cmq! allora il file privato.php per l'accesso diretto va bene! mi rimanda alla pagina di log in con la scritta errore... perfetto
ma se faccio il login la pagina verifica.php mi resistuisce un errore.

Parse error: syntax error, unexpected T_BOOLEAN_OR in /htdocs/public/www/verifica.php on line 4

File verifica.php
PHP:
<?php
session_start(); //inizio la sessione
//prima verifica che non siano vuoti
if(trim($_POST['username']!="")) || (trim($_POST['password']!="")){
	//richiamo i file di connessione al db
    require_once("connessione_db.php");
    require_once("config.php");
    //mi collego
    mysql_select_db($db_name,$connessione) or die (mysql_error());;
    //variabili POST con anti sql Injection
    $username=mysql_real_escape_string($_POST['username']); //faccio l'escape dei caratteri dannosi
    $password=mysql_real_escape_string(sha1($_POST['password'])); //sha1 cifra la password anche qui in questo modo corrisponde con quella del db
    $ris = mysql_query($query, $connessione) or die (mysql_error());
    //verifico che esista la combinazione user pass
    if(mysql_num_rows($ris)>0){//se maggiore di zero esiste oppure mysql_num_rows($ris)==1
        $riga=mysql_fetch_array($ris);
        $cod=$riga['username'];
        $_SESSION['autorizzato'] = 1;
        $_SESSION['username']=$cod;
        header("Location: ".$_SESSION['username']."/privato.php");
        exit();
    }
}
$err="non hai inserito l'username o la password, non sei autorizzato ad entrare";
header("Location:login.php?err=$err");
exit();
?>

Lo so della classe PDO ma già vado in confusione con questo... e onestamente mi toccherebbe studiarla completamente da capo perche cambia molto!
 
ciao
:( ho messo una parentesi in più
if(trim($_POST['username']!="")) || (trim($_POST['password']!="")){
così
PHP:
if(trim($_POST['username']!="") || (trim($_POST['password']!="")){
 

Discussioni simili