Hola, tengo una pagina que muestra informacion de un usuario. Necesito protegerla para que no se pueda acceder a ella si no se cumplen dos requisitos, 1º estar logueado y 2º ser "amigo" de ese usuario.
Utilizo $_GET para saber la informacion que coger de la base de datos.
Hago un if para saber si esta definida la variable get y si el usuario está conectado, por ultimo compruebo si son amigos.
<?php
if(isset($_GET['id'], $_SESSION['user_id'])){
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$id = $_GET['id'];
$connectedUserID = $_SESSION['user_id'];
/* prepare statement */
if ($stmt = $mysqli->prepare("SELECT COUNT(*) rowCount FROM friends WHERE friendID = ? AND userID = ?")) {
$stmt->bind_param('ii', $id, $connectedUserID);
$stmt->execute();
/* bind variables to prepared statement */
$stmt->bind_result($rowCount);
/* fetch values */
if($stmt->fetch()) {
if ($rowCount > 0) {
// zona segura
echo 'It works!';
} else{
echo $_SESSION['username'], ', no estás autorizado para ver la información de este socio ya que no es tu amigo...';
}
}
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
} else {
echo 'No estás autorizado para acceder a esta página';
if (login_check($mysqli) == false) {
echo '. Por favor, <a href="login">inicia sesión</a>.';
} else{
echo ' '.$_SESSION['username'];
}
}
?>
Me gustaría saber si es igual de seguro comprobar isset($_SESSION['user_id']) o hacer un login_check == true.
Gracias!
Cuidado al usar isset, puede arrojarte falsos positivos. Isset sólo comprueba que exista la variable y que no sea NULO. Si la variable por ejemplo contiene un string vacio te regresará true.
Por otra parte, sería bueno comparar las variables ahí mismo si son enteras y no dejarle el trabajo a msqli. Con un $var > 0 bastaría.