Информация об окружении разработчика:
- Местное развитие
- Настройка сетевого диска моего сервера на моем ПК
- Доступ к файлам сервера через путь к каталогу
- Сервер содержит базы данных SQL, к которым серверные файлы обращаются и
При загрузке приложения
Я установил на своей странице ng-init для запуска функции $scope.nginit();
, которая отправляет запрос $ _GET на файл моего сервера с именем login.php:
$http.get(url + "server/login.php",
{ transformResponse: [] })
.success(function(data, status, headers, config)
{
data = JSON.parse(data);
window.localStorage.setItem("session_id",data.session_id);
})
.error( function(data, status, headers, config)
{
console.log("Error: " + data + "; " + status);
});
Это включено в каждый из файлов моего сервера в верхней части страницы:
// if(isset($_GET['session_id'])) {
// session_id($_GET['session_id']);
// } else if(isset($_POST['session_id'])) {
// session_id($_POST['session_id']);
// }
session_start();
include_once "../scripts/masterscript.php";
header("Access-Control-Allow-Origin: *");
$connection = connect_to_database();
try
{
if($_SERVER['REQUEST_METHOD'] != 'POST')
{
setup_form();
}
else
{
process_form();
}
sqlsrv_close($connection);
}
catch (Exception $e)
{
exit("Exception $e->getMessage()");
}
Вот setup_form () для login.php:
function setup_form()
{
global $connection;
header('Content-Type: application/json');
$user_data = array();
$user_data["session_id"] = session_id();
echo json_encode($user_data);
}
On submitForm (); для входа в систему:
Он добавляет session_id, хранящийся в localStorage, в качестве параметра, чтобы его можно было вернуть к сеансу PHP. Он помещает его поверх файла PHP, но этот раздел в настоящее время закомментирован.
Мое намерение, если это пользователь с правами администратора, запустить второй $ http.request и открыть модальное.
$http.post(url + "pages/login.php", data_string,
{ headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8;' },
params : { 'session_id' : window.localStorage.session_id }})
.success(function(data, status, headers, config)
{
var data = data[0];
if(data.is_admin)
{
$http.get(url + "server/get_more_info.php",
{ params : {'user_id' : data.user_id },
transformResponse: [] })
.success(function(data, status, headers, config)
{
// setup to open a modal
})
.error( function(data, status, headers, config)
{
});
}
})
.error( function(data, status, headers, config)
{
});
Поскольку это запрос $ _POST, он переходит к process_form (), и вот он:
function process_form()
{
global $connection;
header('Content-Type: application/json');
$user_data = array();
$data_string = file_get_contents("php://input");
$data = json_decode($data_string);
$user_data['status_msg'] = "Error";
// runs SQL query, grabs user details where email = $data->email
$UserObj = new User(0,$connection, $data->email);
if($UserObj->password == $data->password)
{
$user_data['status_msg'] = "OK";
$user_data['user_id'] = $UserObj->user_id;
$user_data['user_type'] = $UserObj->user_type;
if($UserObj->admin_user == 1)
{
$user_data['is_admin'] = true;
$_SESSION['is_admin'] = 1;
}
$_SESSION['user_id'] = $UserObj->user_id;
$_SESSION['user_type'] = $UserObj->user_type;
}
unset($UserObj);
echo json_encode($user_data);
}
В get_more_info.php
Я пытаюсь получить доступ к переменным сеанса, установленным в login.php, но они пустые. Я намереваюсь использовать эти переменные в запросах SQL:
$user_id = $_SESSION['user_id'];
$admin_user = $_SESSION['admin_user'];
$user_type = $_SESSION['user_type'];
$sql = " select * from info_table where admin_user = ? and user_type = ?";
$params = array($admin_user,$user_type);
$result = sqlsrv_query($connection, $sql, $params);
while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC))
{
}
sqlsrv_free_stmt($result);
unset($result);
Дополнительная информация
Я сделал var_dump (); для обоих из них ниже и возвращаются пустые строки.
ini_get('session.cookie_httponly');
ini_get('session.cookie_secure');
В Firefox появляется первый сетевой запрос для login.php, который является запросом GET
и имеет набор $ _COOKIE. Кажется, что он работает в Chrome, но не Firefox. Я сейчас просто бегаю ionic serve --lab
. В chrome он запускается и открывает модальный режим, как и должен, а в Firefox - нет.
На вкладке сети Firefox для запроса login.php GET
он показывает
set-cookie под заголовками ответа, но нет атрибута, связанного с cookie, в заголовках запросов.
Для запроса login.php POST
он имеет тот же результат, что и предыдущий для cookie, но этот запрос отображается как метод OPTIONS
на вкладке сети вместо POST
.
Вопросы
- Первоначальной проблемой было то, что переменные сеанса были пустыми в get_more_info.php. Это было связано с тем, что он не возобновлялся до того же сеанса, который начался в
$scope.nginit();
. Вместо этого он начинал новый.
- Идея получения session_id для сохранения, чтобы он мог возобновить к тому же сеансу, была выдвинута, вот что я здесь сделал.
- Первоначально я пытался установить session_id, вручную установив его в верхней части моих файлов PHP, но мне было сообщено, что это не нужно, и он должен делать это автоматически, а это не так.