Передача переменных из php в js без ajax

#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:

Мне не нравится встраивать информацию на страницу по соображениям безопасности. В какой-то момент времени будет слишком просто сохранить то, чего там быть не должно. У вас есть два достойных варианта, которые приходят мне в голову:

  1. Выполните вызов ajax во время загрузки страницы (body onload= вызов ajax) (более безопасно)

  2. Сохраните их в файле cookie для сайта (менее безопасно)

Обычно я использую вариант # 1.

Ответ №5:

кажется сомнительным с точки зрения безопасности встраивать электронное письмо в исходный код.

Получение электронной почты через ajax и встраивание ее непосредственно в исходный код сталкиваются с одной и той же проблемой безопасности: кто-то, отслеживающий трафик, может получить электронное письмо. Чтобы избежать этого, вам нужно либо

  1. В первую очередь, найдите способ не отправлять электронное письмо клиенту.
  2. Отправляйте адрес электронной почты клиенту только по протоколу https

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