0

このサイトの助けを借りて、ログイン スクリプトが機能するようになりました。問題は、制限しようとしているページがアクセスを制限していないことです。ログインせずにページにアクセスしても、ページにアクセスできます。私はPHPにまったく慣れていないので、あなたの助けとコメントは大歓迎です.

ページのコードは

<?php require_once('../Connections/PropSuite.php'); ?>
<?php

error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

function isLoggedIn()
{
    if(isset($_SESSION['valid']) && $_SESSION['valid'])
        return true;
    return false;
}


session_start();
//if the user has not logged in
if(!isLoggedIn())
{
    header('Location: http://localhost/PropSuite/index.php');
    die();
}



?>

ログインスクリプトのコードは次のとおりです。

<?php



function validateUser()
{

    session_regenerate_id (); //this is a security measure
    $_SESSION['valid'] = 1;
    $_SESSION['userid'] = $userid;
}


?>

<?php

ob_start(); // Start output buffering

error_reporting(E_ALL & ~E_NOTICE);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

session_start(); //must call session_start before using any $_SESSION variables
$username = isset($_POST['username'])?$_POST['username']:'';
     $password = isset($_POST['password'])?$_POST['password']:'';
//connect to the database here

$hostname_PropSuite = "localhost";
$database_PropSuite = "propsuite";
$username_PropSuite = "root";
$password_PropSuite = "root";
$PropSuite = mysql_pconnect($hostname_PropSuite, $username_PropSuite, $password_PropSuite) or trigger_error(mysql_error(),E_USER_ERROR); 
mysql_select_db($database_PropSuite, $PropSuite);

$username = mysql_real_escape_string($username);

$query = "SELECT password, salt FROM admin_users WHERE username = '$username';";

$result = mysql_query($query) or die(mysql_error());

if(mysql_num_rows($result) < 1) //no such user exists
{
    header('Location: http://localhost/PropSuite/index.php?login=fail');

    die();
}
$userData = mysql_fetch_array($result, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
if($hash != $userData['password']) //incorrect password
{
    header('Location: http://localhost/PropSuite/index.php?login=fail');

    die();
}
else
{
   validateUser(); //sets the session data for this user
}
//redirect to another page or display "login success" message
header('Location: http://localhost/PropSuite/main');
die()




//redirect to another page or display "login success" message


?>

繰り返しますが、あなたの助けとモッズを前もって感謝します。同様の質問を投稿していたら申し訳ありません.

4

2 に答える 2

0

うーん、これは正しいですか:

if(isset($_SESSION['valid']) && $_SESSION['valid'])
    return true;

括弧が抜けていませんか?

私は次のように書きます:

if(!empty($_SESSION['valid']) && !empty($_SESSION['valid']) && $_SESSION['valid'] === true) {
        return true;
 }

おそらくこれがポイントです。これが間違っていた場合、ログインは常に true になります。そして、セッションがなくてもコンテンツを見ることができます!

それが役に立てば幸い!

于 2013-09-28T19:12:50.523 に答える
-1

真を返し、偽を返す

セッション表示ページの場合

else display このページや何かを見るにはログインしてください

于 2013-09-28T18:45:40.303 に答える