web-dev-qa-db-fra.com

session de connexion simple php

Avoir de la difficulté à démarrer ma session. Je regarde mon code depuis deux heures et je ne vois pas ce qui ne va pas. Le problème que je rencontre est que chaque fois que je tape le nom d'utilisateur et le mot de passe, cela me redirige vers la page de connexion pour taper à nouveau les informations alors qu'il devrait afficher le fichier securedpage.php 

Voici mon code:

loginproc.php page - Cette page passe en revue si déclaration et va directement au reste

<?php

// Inialize session
session_start();

// Include database connection settings
include('../../model/database.php');

// Retrieve username and password from database according to user's input
$login = mysql_query("SELECT * FROM user WHERE (username = '" . mysql_real_escape_string($_POST['username']) . "') and (password = '" . mysql_real_escape_string($_POST['password']) . "')");

// Check username and password match
if (mysql_num_rows($login) == 1) {
// Set username session variable
$_SESSION['username'] = $_POST['username'];
// Jump to secured page
header('Location: securedpage.php');
}
else {
// Jump to login page
header('Location: index.php');
}

?>

Page sécurisée.php

<?php

// Inialize session
session_start();

// Check, if username session is NOT set then this page will jump to login page
if (!isset($_SESSION['username'])) {
header('Location: index.php');
}

?>
<html>

<head>
<title>Secured Page</title>
</head>

<body>

<p>This is secured page with session: <b><?php echo $_SESSION['username']; ?></b>
<br>You can put your restricted information here.</p>
<p><a href="logout.php">Logout</a></p>

</body>

</html>

page database.php

<?php
$dsn = 'mysql:Host=localhost;dbname=sports_db';
$username = '';
$password = '';
$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);

try {
    $db = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    $error_message = $e->getMessage();
    include 'errors/db_error_connect.php';
    exit;
}

function display_db_error($error_message) {
    global $app_path;
    include 'errors/db_error.php';
    exit;
}
?>
6
user2446521

Vous ne pouvez pas mélanger PDO et mysql .. Vous créez une requête dans PDO et vous utilisez mysql_*

<?php

// Inialize session
session_start();

// Include database connection settings
include('../../model/database.php');

// Retrieve username and password from database according to user's input
$stmt = $db->prepare("SELECT * FROM user WHERE (`username` = :username) and (`password` = :password)");

$result = $stmt->execute(array(':username'=>$_POST['username'],':password'=>$_POST['password']));
$num_rows = $stmt->rowCount();
// Check username and password match
if ( $num_rows > 0) {
// Set username session variable
$_SESSION['username'] = $_POST['username'];
// Jump to secured page
header('Location: securedpage.php');
}
else {
// Jump to login page
header('Location: index.php');
}

?>

voir reference

8
alwaysLearn

Le problème réside probablement ici: 

if (mysql_num_rows ($ login) == 1) {

Utilisez la triple équation si vous souhaitez rechercher le nombre entier 1. Cependant, il est probable que la connexion/passe échoue.

Et ça:

$ _SESSION ["nom d'utilisateur"] = $ _POST ["nom d'utilisateur"];

c'est une mauvaise pratique, même si vous obtenez une réponse valide.

0
Sven

J'ai une suggestion pour toi: 

1) Ne stockez pas les données données par l'utilisateur directement dans votre variable de session. 

2) Vérifiez d'abord si les informations d'identification de l'utilisateur existent dans votre table, extrayez la ligne correspondante, puis stockez les données extraites dans votre variable de session.

0
Manjunath