PHP Сессия не сохраняется для перенаправления - PullRequest
1 голос
/ 10 января 2020

У меня очень простой c php сайт, использующий сеансы для логина / пароля. У меня есть страница doLogin. php, которая просто проверяет комбинацию имени пользователя и пароля из значений записей и использует перенаправление JavaScript на другую страницу, если вход выполнен успешно.

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

function doLogin()
{

if (array_key_exists('doLogin', $_POST))
    {
        $conn = connect(false);
        $pass = ms($_POST['password']);
        $email = ms($_POST['email']);

        $query = "SELECT * from `users` WHERE `email` = '$email' AND `password` = '$pass';";
        $r = $conn->execute($query);

        if ($r === false)
        {
            error_log('Error ' . $conn->errorNo() . " " . $conn->errorMsg());
            print "Unable to authenticate.";
        }

        if ($r->RecordCount())
        {
                $row = $r->FetchRow();
                $approval = $row['approval'];
                $user_id = $row['user_id'];
                if($approval == 1)
                {
                    $_SESSION['login'] = true;
                    $_SESSION['security'] = $row['security'];
                    $_SESSION['f_name'] = $row['f_name'];
                    $_SESSION['l_name'] = $row['l_name'];
                    $_SESSION['email'] = $row['email'];
                    $_SESSION['approval'] = $row['approval'];
                    $_SESSION['user_id'] = $row['user_id'];
                    session_write_close();
                    echo '<script type="text/javascript">setTimeout(function(){window.location="MYSITE/members"},1000)</script>';                                    
                }
                else
                {
                    $error = "";
                }
        }
        else
        {
            $error = '<div class="warning" style="width: 920px; margin: 0 auto; padding: 25px 50px;">Invalid Username / Password combination.</div>
                        <script type=\"text/javascript\">window.location=\"MY SITE\"</script>';
        }
    }
return "$error";
}//end doLogin


Я уверен, что я делаю очевидную ошибку (кроме того факта, что я храню пароли в виде простого текста). Может кто-нибудь мне помочь?

РЕДАКТИРОВАТЬ: код для страницы, которая не хранит сеансы

<?php

  session_start();
  header("Cache-control: private"); //IE 6 Fix
  require_once '../php-inc/elements.php';
  require_once '../php-inc/database.php';
  $conn = connect(false);

//LOGOUT
    if (array_key_exists('logout', $_GET) && ($_GET['logout'] == 1) && !array_key_exists('doLogin', $_POST))
    {
        session_destroy();
        $_SESSION=array();
        $logout = '<br><br><div class="success" style="width: 920px; margin: 0 auto; text-align: center; padding:25px 50px;"><strong>You have successfully logged out.</strong></div><br><br>';
        echo '<script type="text/javascript">setTimeout(function(){window.location="MYSITE.org"},3000)</script>';
    }


?>

<?php 

if(!empty($_SESSION['user_id']))
{ 
    //SHOW STUFF
}

else
{
    $error = denyPermission();

    echo $error;    
}
?>

1 Ответ

0 голосов
/ 10 января 2020

Вы должны вызывать session_start() на страницах, которые вы храните и извлекаете значения из сеанса.

PHP session_start () документация

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