моя сессия PHP не работает правильно - PullRequest
0 голосов
/ 23 марта 2011

Я создал страницу входа для своего веб-сайта, которая работает правильно, но если я просто наберу веб-страницу после URL, я смогу получить к ней доступ, даже не войдя в систему!

Мне это нужно, чтобы вы могли получить доступ к странице, только если вы вошли в систему.

поэтому моя страница входа в систему использует форму, которая, в свою очередь, использует скрипт проверки входа в систему.

           <?php
            $host="localhost"; // Host name
            $username="blank"; // Mysql username
            $password="blank"; // Mysql password
            $db_name="blank"; // Database name
            $tbl_name="members"; // Table name

             // Connect to server and select databse.
            mysql_connect("$host", "$username", "$password")or die("cannot connect");
            mysql_select_db("$db_name")or die("cannot select DB");

            // username and password sent from form
            $myusername=$_POST['myusername'];
             $mypassword=$_POST['mypassword'];

             // To protect MySQL injection (more detail about MySQL injection)
             $myusername = stripslashes($myusername);
             $mypassword = stripslashes($mypassword);
             $myusername = mysql_real_escape_string($myusername);
             $mypassword = mysql_real_escape_string($mypassword);

             $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and      password='$mypassword'";
            $result=mysql_query($sql);

            // Mysql_num_row is counting table row
            $count=mysql_num_rows($result);
            // If result matched $myusername and $mypassword, table row must be 1 row

            if($count==1){
           // Register $myusername, $mypassword and redirect to file "login_success.php"
         session_register("myusername");
          session_register("mypassword");
         header("location:login_success.php");
         }
         else {
         Print "<html>";
         Print "<head>";
         Print "<link href='styles.css' rel='stylesheet' type='text/css' />";
         Print "</head>";
         Print "<body>";
         Print "<img src=images/banner2.png  alt='banner' />";
         Print "<p>Wrong Username or Bad Password.</p>";
         Print "<p>Or <a href='./index.html'>Click Here</a> to try again.</p>";
         Print "</body>";
         Print "</html>";
         }
         ?>

и на каждой странице у меня есть:

<?php
 session_start();
 if(!session_is_registered(myusername)){
 header("location: index.html");
 }
 ?>

форма пароля работает, если у вас нет действительного пароля, тогда он говорит неверный пароль, но я все равно могу получить доступ к каждой странице, если знаю их имена.

спасибо

Ответы [ 3 ]

3 голосов
/ 23 марта 2011

просто обратитесь к переменной $ _SESSION напрямую,

полупсевдо:

if(authorized()){
    $_SESSION['username'] = 'Hi'; 
}

if($_SESSION['username'] != ''){
// online
}
2 голосов
/ 23 марта 2011

Эта функция УСТАРЕЛА как PHP 5.3.0. Опираясь на эту функцию очень не рекомендуется.

и вы должны использовать код для записи ниже

<?php
        if($count==1){
            session_start();            
            $_SESSION['$myusername'];
            $_SESSION['$mypassword'];
            header("location:login_success.php");
         }
         else {
         session_unset();
         session_destroy();
         $_SESSION = array();
         session_start();        
         }
?>

и на каждой странице отметьте это

$authorized=false;
@session_start();
if(isset($_SESSION['$myusername'] && isset($_SESSION['$mypassword']);
{
    $authorized = true;
}

if(!authorized)
{
    header('location:index.html');
    exit();
}
0 голосов
/ 23 марта 2011

Вы пытались использовать session_destroy, если пароль неверен?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...