#javascript #php #html
#javascript #php #HTML
Вопрос:
Мысль о создании еще одного запроса get и еще одного файла php меня раздражает … поэтому я использую этот метод:
<input class='hidden' id='dataIwant' value=' <?php echo $_SESSION["bigObjectArray"] ?>" />
Это плохая практика? Что вы думаете?
Комментарии:
1. не забывайте 2 вещи: 1: значение может содержать
"
и разрывать HTML, 2: значение этого скрытого поля может быть изменено пользователем перед отправкой с формой2. это массив
$_SESSION["bigObjectArray"]
?
Ответ №1:
ИМХО, переменные сеанса могут быть опасны для отображения на стороне клиента. Пользователю должна быть показана только их часть, такая как индексы, строки, которые пользователь уже знает. Если переменная сеанса содержит что-то вроде пароля пользователя, токена сеанса и т. Д., Она должна быть скрыта.
Что касается вашего вопроса, он меняется, когда вы хотите использовать эти данные. Если это только для передачи его внутри формы на другую страницу PHP, вам не нужно этого делать, так как он все равно будет доступен на странице обработки формы.
Если вы хотите использовать его внутри кода javascript на стороне клиента, вы можете json_encode его и присвоить его переменной javascript.
<script type="text/javascript">
var myBigJSON = <?php echo json_encode($_SESSION["bigObjectArray"]);?>;
var myBigArray = $.parseJSON(myBigJSON);
</script>
Ответ №2:
Я думаю, что этот пример говорит сам за себя:
<?php
session_start();
$_SESSION['bigObjectArray'] = "" /><script>alert('Hi!')</script><input type="hidden";
?>
<input class="hidden" id="dataIwant" value="<?php echo $_SESSION["bigObjectArray"] ?>" />
вывод:
<input class="hidden" id="dataIwant" value="" /><script>alert('Hi!')</script><input type="hidden" />
Обязательно проверяйте и фильтруйте данные, которые вы повторяете. Будьте параноиком, всегда.
Ответ №3:
Это плохая практика, если вы не экранируете ее ( htmlentities
или htmlspecialchars
).
Это плохая практика, если у пользователя нет причин изменять это поле.
Это плохая практика для просмотра с несколькими вкладками, поскольку она SESSION
сохраняется (одновременная запись / чтение страниц с этим значением завершится ошибкой).
Рекомендуется, если вы экранируете значение в html, если пользователь может изменить это поле (и если вы проверяете его на странице обработки), и если это позволяет избежать сохранения этого значения SESSION
.