Почему мои переменные сеанса PHP работают только в определенных браузерах и не работают в других? - PullRequest
0 голосов
/ 07 февраля 2019

Итак, я пытаюсь настроить основную форму входа пользователя.Я хочу сравнить входные данные с существующей базой данных.Все отлично работает в Firefox.Вся информация передается.Но в: Chrome, Safari, IE.Почти все, что я пытаюсь.Ни один из данных сеанса не проходит?

Например.

Это мой существующий код.Он отлично работает в Firefox

login.php

<?php
    require_once('../../config/sessionHandler.php'); 
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
    <script src="JavaValidate.js" type="text/javascript"></script> 

    <title>Login</title>

</head>
<body>
    <div  class="container">
        <form class="form-horizontal" role="form" id="logForm" name="logForm" method="POST" action="ajax.php">
            <div id="userName-group" class="form-group">
                <label for="txtUserName" class="col-sm-2 control-label">User Name:</label>
                <div class="col-sm-10">
                    <input type="text" class="form-control" id="inputUserName" name="txtUserName" placeholder="User Name"  maxlength="9">
                </div>
            </div>
            <div class="form-group">
                <label for="txtPasswordInput" class="col-sm-2 control-label">Password:</label>
                <div class="col-sm-10">
                    <input type="password" class="form-control" id="inputPassword" name="txtPassword" placeholder="Password" value="">
                </div>
            </div>
            <div class="form-group">
                <div class="col-sm-10 col-sm-offset-2">
                    <button type="submit" class="btn btn-success">Submit <span class="fa fa-arrow-right"></span></button>
                </div>
            </div>

            <div class="form-group">
                <div class="col-sm-10 col-sm-offset-2">
                    <input id="btnLogout" onclick="location.href = 'logout.php';" name="logout" type="button" value="logout" class="btn btn-primary">
                </div>
            </div>
    </form>
    </div>

   </body>
</html>

У меня есть базовый HTML с 2 входами.Имя пользователя и пароль. Используется 3 файла.мой ajax.php, sessionHandler.php и мой JavaValidate.js

sessionHandler.php

<?php
if(session_status() === PHP_SESSION_NONE)
{
session_start();
}
$userName= $_SESSION['UserName'];
?>

JavaValidate.js

$(document).ready(function()
{
    $('#logForm').submit(function(event)
        {
            var logData = {
                'userName': $('input[name=txtUserName]').val(),
                'password': $('input[name=txtPassword]').val(),
            }

            $.ajax({
                type        : 'POST', 
                url         : 'ajax.php', 
                data        : logData, 
                dataType    : 'json', 
                encode      : true
            })

            .done(function(data)
                {
                    if(!data.success)
                    {
                       if (data.errors.userName) 
                            {
                                $('#userName-group').addClass('has-error');
                                $('#userName-group').append('<div class="help-block">' + data.errors.userName+ '</div>');
                            }
                    }
                    else
                    {
                        //APPEND SUCCESS
                        $('form').append('<div class="alert alert-success">' + data.message + '</div>');
                    }
                })
            .fail(function(data)
                {

                });
            event.preventDefault();
        });
});

ajax.php

<?php

require_once('../../config/sessionHandler.php'); 

//VARIABLE DECLARATION
$formdata = array();
$inputString = $_POST['userName'];
$inputPass = $_POST['password'];


    $data['message'] = 'Success!';
    $_SESSION['UserName'] = $inputString;
    $_SESSION['Password'] = $inputPass;
    $_SESSION['Errors'] = $errors['userName'];

echo json_encode($data);

?>

Когда я запускаю это в разных браузерах, я получаю разные результаты?После того как я отправлю форму со следующими данными:

FireFox

Input: "Username", "Password1"
$_SESSION['Username'] = Username
$_SESSION['Password'] = Password1

Google Chrome

Input: "Username", "Password1"
$_SESSION['Username'] = Username
$_SESSION['Password'] = NULL

Браузер Safari (на моем телефоне)

Input: "Username", "Password1"
$_SESSION['Username'] = Username
$_SESSION['Password'] = NULL

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

Если кто-нибудь сможет помочь мне пролить некоторый свет на это, это будет очень признательно!Спасибо всем за потраченное время!

...