如何传递和使用php中的header()传递的变量从1个文件到另一个文件

时间:2014-09-17 05:05:53

标签: php

我在" $ 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不应该用于敏感信息,如用户名,密码等?

4 个答案:

答案 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&parameter2=value2');

如果您不使用SSL或类似的加密方法,POST和GET参数都很容易修改,并且不安全。如果您需要传递一些敏感信息,请使用session

session_start();
$_SESSION['parameter'] = 'value';

一般来说,Cookie也不安全。