- Home
- Categorie
- Coding e Sistemistica
- Coding
- Problema cookie in area riservata
-
Ciao Gigi991,
stai facendo il controllo sul cookie dopo che fai il controllo sulla sessione per cui è normale che non superi il primo controllo.
-
Ah..
Effettivamente spostando nella sola pagina di login il controllo cookie prima dell'apertura della sessione funziona tutto come prima, ma mantiene aperta l'area riservata anche aprendo nuove finestre!Per voi sarà una cosa semplice, ma questa volta non mi spiego come ho fatto a farne una buona quasi da solo (contando la poszione sbagliata :P).
Non ci sono altre cose da aggiungere allora, è giusto così?
Grazie mille!
-
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?