#php #javascript
#php #javascript
Вопрос:
Допустим, у меня есть страница php… Я хочу, чтобы javascript на этой странице получал доступ к некоторым переменным пользовательской информации (после входа в систему), таким как userid, email и т.д. Если я использую ajax, то это займет дополнительные полсекунды, потому что страница должна загрузиться, а затем ждать, пока ajax получит эти переменные, поэтому я бы предпочел встроить это на страницу, но это кажется сомнительным с точки зрения безопасности для встраивания электронного письма в исходный код.
Вот мои варианты, можете ли вы придумать способ получше?
1 — Встроить данные в php по первому запросу
<html>
<script>
user_email='<?php echo $user_email; ?>';
</script>
2. Данные загружаются отдельно от файла js / php, поэтому их нет в исходном коде страницы
<html>
<script src="userdata.js.php"></script>
--- userdata.js.php ---
user_email='<?php echo $user_email; ?>';
3 — Запрашивать данные через ajax после загрузки страницы (было бы медленнее)
<html>
<script>
$(function(){
$.post('getuserdata.php',[],function(result){
userdata=resu<
});
});
</script>
Ответ №1:
Другой вариант, который вы могли бы рассмотреть, — это использование JSONP для асинхронного вызова функции после загрузки AJAX.
HTML
<script type="text/javascript">
function handle_response(response)
{
// do whatever you want with the response
// you get a json object here that looks like
// { id: 1, username: 'jimmy' }
}
</script>
<script type="text/javascript src="/path/to/ajax/script.php"></script>
script.php
<?php
$arr = array('id' => 1, 'username' => 'jimmy');
$param = json_encode($arr);
header("Content-type: text/javascript");
echo "handle_response({$param})";
exit;
Итак, теперь, как только этот действительный javascript из script.php завершает загрузку, немедленно вызывает вашу функцию, которую вы определили на стороне клиента. Это исключает доступ к вашей информации из исходного HTML-источника, и вы даже можете поместить этот скрипт за https, не делая этого для остальной части сайта.
Ответ №2:
Я всегда использую первый шаг
var myvar = <?php echo $myvar; ?>;
Ответ №3:
В наши дни люди довольно привыкли к ajax, и круг, говорящий о загрузке, не такая уж редкость. С другой стороны, если вы можете встроить данные, это так же хорошо. Создание отдельного файла еще лучше. Вы должны быть осторожны с тем, какую информацию вы предоставляете, хотя вы могли бы использовать SSL, чтобы сделать ее более безопасной.
Все три являются жизнеспособными … зависит от того, от кого вы пытаетесь защитить данные. Пользователь, вызвавший страницу, будет иметь доступ к информации тем или иным способом… поэтому выбирайте более надежную реализацию.
Ответ №4:
Мне не нравится встраивать информацию на страницу по соображениям безопасности. В какой-то момент времени будет слишком просто сохранить то, чего там быть не должно. У вас есть два достойных варианта, которые приходят мне в голову:
-
Выполните вызов ajax во время загрузки страницы (body onload= вызов ajax) (более безопасно)
-
Сохраните их в файле cookie для сайта (менее безопасно)
Обычно я использую вариант # 1.
Ответ №5:
кажется сомнительным с точки зрения безопасности встраивать электронное письмо в исходный код.
Получение электронной почты через ajax и встраивание ее непосредственно в исходный код сталкиваются с одной и той же проблемой безопасности: кто-то, отслеживающий трафик, может получить электронное письмо. Чтобы избежать этого, вам нужно либо
- В первую очередь, найдите способ не отправлять электронное письмо клиенту.
- Отправляйте адрес электронной почты клиенту только по протоколу https
Я полагаю, что многие веб-сайты просто игнорируют эту проблему и отправляют электронное письмо клиенту в незашифрованном виде.