цикл сеанса / аутентификации - PullRequest
0 голосов
/ 25 февраля 2012

У меня есть цикл в этом куске кода (пользователь возвращается на страницу входа).Проблема в следующем:

else if (!$session_id){
    //if user is not logged in, send to the login page
    header("Location:" . $Config_live_site . "/user_events/login.php");
    exit;
}

У меня такое ощущение, что это как-то связано со всеми вложенными операторами if.Если это «иначе, если» сверху удалено, пользователь может войти в систему, и все функции сеанса работают нормально.Вот код:

    //check if the user has clicked on a submit button in a login form in login.php
if (isset( $_POST['submit'] )) {
    $username   = $_POST['username'];
    $pass       = $_POST['password'];
    if (!$username) {
        echo "<script>alert('Please enter username'); document.location.href='index.php?option=login$string_2';</script>\n";
    }
    if (!$pass) {
        echo "<script>alert('Please enter a password'); document.location.href='index.php?option=login$string_2';</script>\n";
    }
    else {
        $pass = md5( $pass );
    }
//set up user object and start a new session
    $user = new user();
    $database->get_user(&$user, $username, '1');
        if (!strcmp( $user->user_pass, $pass)) {
            session_name( 'login' );
            session_start();
            $logintime  = time();
            $session_id = md5( "$user->username$user->user_type$logintime" );
            $database->set_session($user, $session_id, $logintime);
            $_SESSION['session_id']         = $session_id;
            $_SESSION['session_username']   = $user->username;
            $_SESSION['session_usertype']   = $user->user_type;
            $_SESSION['session_logintime']  = $logintime;
            session_write_close();
        // cannot using mosredirect as this stuffs up the cookie in IIS
                if ($suboption) {
                echo "<script>document.location.href='index.php?$string';</script>\n";
                } else {
                echo "<script>document.location.href='index.php?option=subscriber_home';</script>\n";
                }
                exit();
        } else {
        echo "<script>alert('Incorrect Username and Password, please try again'); document.location.href='index.php?option=subscribe$string_2';</script>\n";
        exit();
        }
}
else if (!$session_id){
    //if user is not logged in, send to the login page
    header("Location:" . $Config_live_site . "/user_events/login.php");
    exit;
}



//session starts 
session_name( 'login' );
session_start();
if ($option == 'logout') {
    require 'logout.php';
    exit();
}

$user = new user();
$user->username = $_SESSION['session_username'];
$user->user_type = $_SESSION['session_usertype'];
$session_id = $_SESSION['session_id'];
$logintime = $_SESSION['session_logintime'];

1 Ответ

1 голос
/ 25 февраля 2012

Этот код очень грязный, и я не могу вам полностью помочь, не зная, что представляет собой объект вашей базы данных и как он работает, но сделайте что-то вроде этого.Это упростит ваши кучи кода.

session_start();
try{
    if(!isset($_POST['submit']))
        throw new exception('No Post Data Found.');

    if(!isset($_POST['username']))
        throw new exception('Please enter a username.');

    if(!isset($_POST['password']))
        throw new exception('Please enter a password.');

    $username = $_POST['username'];
    $password = $_POST['password'];
    $password = md5($password);

    //CHECK IF USER CREDENTIALS ARE CORRECT HERE
    #$result = database results as object.
    $valid_credentials = true;

    if(!$valid_credentials)
        throw new exception('Your credentials were incorrect.');

    $_SESSION['username'] = $username;
    $_SESSION['user_type'] = $result->user_type;
    $_SESSION['logintime'] = time();

    echo '<script>document.location.href="success.php";</script>'
catch (Exception $E){
    echo "<script>alert('$E->getMessage()'); document.location.href='login.php'; </script>";
}

Некоторые из этих методов я бы не рекомендовал, но я старался как можно лучше вписать их в ваш код.Вам, очевидно, нужно добавить объект базы данных в код.

Я бы также предпочел заголовок пользователя ('Location:');Чем сценарий JavaScript, но я использовал ваши существующие инструменты.

Goodluck!

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