6

セッションを起動して実行するのに問題があります。過去数時間、自分のコードを調べてきましたが、何が問題なのかわかりません。私が経験している問題は、ユーザー名とパスワードを入力するたびに、securepage.php を表示する必要があるときに、ログインページにリダイレクトして情報を再度入力することです。

これが私のコードです:

loginproc.php ページ- このページは if ステートメントをステップスルーし、else に直接進みます

<?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');
}

?>

securepage.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>

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;
}
?>
4

3 に答える 3

8

PDO と mysql を混在させることはできません。クエリを作成しPDOて使用してい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');
}

?>

見るreference

于 2013-06-03T05:33:27.313 に答える
0

問題はおそらくここにあります:

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

整数 1 を確認したい場合は、三重方程式を使用します。ただし、ログイン/パスが失敗する可能性が最も高いです。

この:

$_SESSION['ユーザー名'] = $_POST['ユーザー名'];

有効な応答が得られたとしても、悪い習慣です。

于 2013-06-03T04:30:55.177 に答える
0

あなたに提案があります:

1)ユーザーが指定したデータをセッション変数に直接保存しないでください。

2)最初にユーザー資格情報がテーブルに存在するかどうかを確認し、対応する行をフェッチしてから、フェッチしたデータをセッション変数に保存します。

于 2013-06-03T04:39:22.523 に答える