我在" $ variables"中有一系列变量。它包含如下数据: -
$variables['firstname'] = "Sachin"; (say the user filled in these)
$variables['lastname'] = "Tendulkar";
$variables['firstname'] = "SachinTendulkar";
现在,在同一页面上验证后,我使用: -
header("Location:http://localhost/PhpSample/target.php");
将用户重定向到另一个页面" target.php"。 " header()"中的语法是什么?函数将数组$变量的值传递给" target.php"文件并在" target.php"中使用这些值文件显示用户输入的内容?
target.php代码
<?php
echo "<h2>Your Input:</h2>";
echo "Firstname:" .; //Here what needs to be written after . and before ; to use the values passed from the other file
echo "<br>";
echo "Lastname:" .;
echo '<br>';
echo "Username:" .;
echo '<br>';
?>
我在某处读到了我们必须在&#34; target.php&#34;中使用$ _GET [&#39; firstname&#39;]使用这些值。如果它是正确的那么这是不安全的,因为$ _GET不应该用于敏感信息,如用户名,密码等?
答案 0 :(得分:2)
由于您需要通过header()
传递数组,因此请使用http_build_query
:
header("Location:http://localhost/PhpSample/target.php?vals=" . http_build_query($arr));
请注意,重定向本质上无法执行POST。它将导致新的GET请求,这意味着您必须在URL中传递数据。如果你有一个非常大的网址,你几乎可以保证丢失大部分网址,因为网址有长度限制。
但是,如果它很短,你也可以试试:
header("Location:http://localhost/PhpSample/target.php?vals=" . urlencode(serialize($variables)));
您可以在 target.php 文件中访问数组值:
$Values= unserialize(urldecode($_GET['vals']));
echo "<h2>Your Input</h2>";
foreach($Values as $key => $value) {
echo $key." : ".$value."<br>";
}
否则
<?php
$Values= unserialize(urldecode($_GET['vals']));
echo "<h2>Your Input:</h2>";
echo "Firstname:" .$Values['firstname']; //Here what needs to be written after . and before ; to use the values passed from the other file
echo "<br>";
echo "Lastname:" .$Values['lastname'];
echo '<br>';
echo "Username:" .$Values['username'];
echo '<br>';
?>
答案 1 :(得分:1)
我过去为将变量放到另一个页面而做的是将变量设置为$_SESSION
变量。
这将指定要由任何页面访问的变量。
请记住在使用任何$ _SESSION变量之前启动会话:
session_start();
$_SESSION['userData'] = $variables;
userData是一个给Sessionsit的名称,可以命名为任何名称,而这个名称将用于检索同一个Session。 PHP Manual on $_SESSION
$userDataFromValidation = $_SESSION['userData'];
这样就可以避免用户可以用来执行XSS的任何Get请求。
答案 2 :(得分:1)
例如,您传递变量名称:“flagtype”及其值=“network”
从您要传递的位置写入标题位置代码,
header("location:anotherfilename.php?flagtype=network&variable2=value2");
语法:
header("location:anotherfilename.php?variablename=valuename&variablename2=value2");
答案 3 :(得分:1)
HTTP Location field接受一般格式的网址,因此您可以向其添加GET参数:
header('Location: http://domain.com/path/to/file/?parameter1=value1¶meter2=value2');
如果您不使用SSL或类似的加密方法,POST和GET参数都很容易修改,并且不安全。如果您需要传递一些敏感信息,请使用session:
session_start();
$_SESSION['parameter'] = 'value';
一般来说,Cookie也不安全。