- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema cookie in area riservata
-
Fai attenzione alla sicurezza, poichè è sufficiente impostarsi manualmente il cookie per poter accedere all'area riservata.
Una soluzione più sicura sarebbe impostare 2 cookie uno con nome utente e uno con la password, ed in ogni pagina eseguire un controllo sulla validità di questi.
-
Quindi del tipo:
[PHP]if ($_COOKIE["nickname"] == $utente*['user'])
if ($_COOKIE["password"] == $utente*['pass'])[/PHP]Al posto di:
[PHP]if ($_COOKIE["login"] == "y")[/PHP]
?E nel login.php settare così:
[PHP]setcookie("nickname", "$utente*['user']", time() + 600);
setcookie("password", "$utente*['pass']", time() + 600);[/PHP]Ho provato in questo modo ma cliccando su accedi mi torna alla index visualizzando però il contenuto pubblico..
-
Non ho capito il problema, ma comunque in quel modo dovrebbe dare errori di sintassi:
[php]
setcookie("nickname", $utente*['user'], time() + 600);
setcookie("password", $utente*['pass'], time() + 600);
[/php]
-
Ho provato a correggere togliendo i doppi apici, ma il risultato è lo stesso.
In pratica scrivo nickname e password esatti e reindirizza alla index.php, fin qui è giusto, solo che una volta reindirizzato alla index.php dovrebbe visualizzare il contenuto privato, mentre si vede ancora quello pubblico, come se non avessi effettuato il login. Provo a postare i nuovi codiciindex.php
[PHP]<?php
if ($_COOKIE["nickname"] == $utente*['user'])
if ($_COOKIE["password"] == $utente*['pass'])
session_start();
include('users.php');
if(isset($_SESSION['login']))
echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Area privata</title>
</head>
<body>
Menu amministrazione<br />- <a href="index.php">Homepage</a><br />- <a href="logout.php">Disconnetti</a>
</body>
</html>';else
echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Area pubblica</title>
</head>
<body>
Menu pubblico<br />- <a href="index.php">Homepage</a><br />- <a href="login.php">Connettiti</a>
</body>
</html>';
?>[/PHP]login.php
[PHP]<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Form di login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Username" style="width:100px;font-family:Verdana;font-size:12px;font-weight:bold;color:#666666;" /><br />
<input name="pass" type="password" id="pass" value="Password" style="width:100px;font-family:Verdana;font-size:12px;font-weight:bold;color:#666666;" /><br />
<input name="login" type="submit" style="width:100px;" value="Login" />
</form>
</body>
</html>
<?php
session_start();
if(isset($_POST['user']))
{
include('users.php');
$c = count($utente);
$i = 0;
while($i < $c && $utente*['user'] != $user && $utente*['pass'] != $pass)
$i++;
if($i<$c)
{
$_SESSION['login'] = $utente*['id'];
setcookie("nickname", $utente*['user'], time() + 600);
setcookie("password", $utente*['pass'], time() + 600);
header('Location: index.php');
exit;
}
else
die('Username o assword errati');
}
?>[/PHP]logout.php
[PHP]<?php
session_start();
include('users.php');
session_destroy();
setcookie("nickname");
setcookie("password");
header('Location: index.php');
exit;
?>[/PHP]Dove sbaglio?
-
Ma $i non ha alcun valore...
-
@Thedarkita said:
Ma $i non ha alcun valore...
Non viene impostato qui?
[PHP]$c = count($utente);
$i = 0;
while($i < $c && $utente*['user'] != $user && $utente*['pass'] != $pass)
$i++;[/PHP]In pratica era per dire di contare un utente per ogni riga presente nel file users.php, è sbagliato?
-
In login.php si, ma in index.php no.
-
Ho provato ora spostando il richiamo da users.php in alto, e togliendo $i,
include('users.php');
if ($_COOKIE["nickname"] == $utente['user'])
if ($_COOKIE["password"] == $utente['pass'])
session_start();
if(isset($_SESSION['login']))Ma il risultato rimane comunque lo stesso, penso di sbagliare ancora nella index.php perchè controllando i cookie le informazioni su utente e password sono esatti. Solo non capisco come prelevare i dati due dati utili dall'array, facendo il controllo riga per riga..
-
Se $utente è un array devi fare un ciclo per scorrerlo e controllare che ci sia un utente con quelle credenziali di accesso, come hai fatto in login.php.
-
Ho riprovato ora a partire da 0 per riordinare un po le idee, e sono tornato al punto di dover modificare la index.php.
Prima però ho provato lo script e noto ora che senza aver aggiunto la parte che richiede i cookie mi si apre la pagina privata anche cambiando finestre, chiudendo e riaprendo il tutto mi da l'effetto voluto, quando effettuo il login mi registra i due cookie con nickname e password e la sessione, e quindi si cancellano i due cookie quando faccio logout.
Solo mi chiedo come mai funziona così come io voglio, quando nella pagina index.php non ci sono richieste di cookie? Questi i codici**index.php
[php]<?php session_start();
include('users.php');
if(isset($_SESSION['login']))
echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Area privata</title>
</head>
<body>
Menu amministrazione<br />- <a href="index.php">Homepage</a><br />- <a href="logout.php">Logout</a>
</body>
</html>';
else echo '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Area pubblica</title>
</head>
<body>
Menu pubblico<br />- <a href="index.php">Homepage</a><br />- <a href="login.php">Login</a>
</body>
</html>';
exit; ?>[/php]login.php
[php]<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Form di login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Username" style="width:100px;font-family:Verdana;font-size:12px;font-weight:bold;color:#666666;" /><br />
<input name="pass" type="password" id="pass" value="Password" style="width:100px;font-family:Verdana;font-size:12px;font-weight:bold;color:#666666;" /><br />
<input name="login" type="submit" style="width:100px;" value="Login" />
</form>
</body>
</html>
<?php session_start();
if(isset($_POST['user'])) {
include('users.php');
$c = count($utente);
$i = 0;
while($i < $c && $utente['user'] != $user && $utente['pass'] != $pass)
$i++;
if($i<$c) {
$_SESSION['login'] = $utente*['id'];
setcookie("nickname", $utente*['user'], time() + 120);
setcookie("password", $utente*['pass'], time() + 120);
header('Location: index.php');
exit;
}
else die('Username o password errati');
}?>[/php]**logout.php
[php]<?php session_start();
include('users.php');
session_destroy();
setcookie("nickname");
setcookie("password");
header('Location: index.php');
exit; ?>[/php]users.php**
[php]<?php $utente[]=array('id' => '0', 'user' => 'user0', 'pass' => 'pass0');
$utente[]=array('id' => '1', 'user' => 'user1', 'pass' => 'pass1');
$utente[]=array('id' => '2', 'user' => 'user2', 'pass' => 'pass2'); ?>[/php]E' comunque errato e c'è da aggiungere la richiesta nella index.php o va bene così?
E se va bene, ora il problema dovuto alla sicurezza è risolto?
-
Scusate il doppio post ma devo rettificare, lo script anche prendendo quello di partenza non va bene perchè basta inserire giusto o il nome utente o la password e si accede all'area privata, solo che per ogni utente deve effettuare l'accesso con la sola password presente nello setsso array, e non deve bastare un solo nickname o una sola password a caso per accedere..
Dove ho sbagliato?