Код входа в систему php требует входа в систему дважды из-за перенаправления - PullRequest
1 голос
/ 11 января 2012

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

function login()
{
    // secure data
    $email      = mysql_real_escape_string(htmlentities($_POST['email']));
    $password   = md5(mysql_real_escape_string(htmlentities($_POST['password'])));
    // sql statment
    $tbl=$this->tbl;
    $sql="SELECT id, admin, email FROM $tbl WHERE email='$email' AND password='$password'";
    $result=$this->query($sql, true);
    // check if user exist
    $numRow=mysql_num_rows($result);
    if($numRow==1)
    {
        // login
        while($row = mysql_fetch_array($result))
        {
            $_SESSION['id']=$row['id'];
            $_SESSION['admin']=$row['admin'];
        }
        // problematic redirect. http redirect erases session data?
        header('Location: http://www.website.com/');
        return true;
    }
    $this->error="logint";
    return false;
}

Ответы [ 3 ]

2 голосов
/ 11 января 2012

ВСЕГДА session_start() до того, как вы установите или получите переменные сеанса

0 голосов
/ 13 сентября 2013

Я полагаю, что перенаправление находится в другом домене.

Ограничение состоит в том, чтобы хранить данные в домене для другого.

Одним из элегантных решений является хранение информации в вашей базе данныхсоздайте заявку, уникальную только для этой передачи в виде строки, и используйте для этого функцию md5 ().например, используйте дату, включенную в среднюю позицию в длинной строке.Храните его в базе данных с задержкой в ​​1 минуту для безопасности.

включите это, чтобы заменить заголовок

$tt= new DateTime();
$tt->format('Y-m-d/H:i:s');
$astring = "On a website I am working on you have to login in twice for the session variables to register. from the suggested questions I have read it is caused when you do a header redirect. possible php solutions(if none I can echo a javascript redirect";
$arandom = rand(0, (strlen($astring) - 19));
$astring = substr_replace($astring,$tt->format('Y-m-d/H:i:s'),$arandom,19);
$code =  md5($astring).crc32($astring);

// use $code to remember all information of your client in the database et reuse on demand of script associated with client0002
echo "<script language=\"javascript\">
    window.location.assign('http://www.yamikowebs.com/test/client0002?acces=$code')</script>";

Хорошего дня.

0 голосов
/ 12 сентября 2013

Одно из решений - отправить клиенту javascript, вот и все!

Я проверяю вашу запись DNS для www.yamikowebs.com.Также убедитесь, что у вас есть разрешение IP на вашем клиенте для тестирования!

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