将php变量从一个页面传递到另一个页面

时间:2012-01-13 10:45:15

标签: php

好吧,我刚刚开始研究服务器端脚本,我选择了PHP,所以让我解释一下我遇到麻烦的地方。

这是一个非常简单的问题。看,我的page1.php上有一些这样的链接

 <a href="page2.php">profile</a>
 <a href="page3.php">photos</a>

现在当用户跳转到page2.php或page3.php时,我也想将用户唯一ID传递给相应的页面,比如他的email.so我可以根据用户名更新page2.php。

当我用Google搜索时,我听到很多矛盾,有些人在解释使用session_start(),有些人解释cookies,有些人说POSTGET方法。有些人说当你使用GET或POST方法时很容易入侵,有些人回答Cookies是客户端,它与服务器断开连接,在听完所有我决定使用的session_start()

之后

但是作为一个新手,我不知道该选择什么,这是最好的方法。有人可以向我解释哪个是最好的解决方案,为什么?还请提供一些示例,以便我能更好地理解它。非常感谢任何帮助。谢谢

6 个答案:

答案 0 :(得分:0)

按照优先顺序排列您在问题中提出的问题。

会话

由于这是当前用户的详细信息,因此最简单的方法是使用PHP会话。这将允许您从任何调用$_SESSION DOCs函数的页面访问名为session_start() DOCs的超级全局数组中的详细信息。这应该在任何输出发送到浏览器之前出现,因此它通常放在PHP脚本的最顶层。

每个用户在服务器上都有自己的会话,session_start()自动为您的脚本提供当前用户的正确数据。

page1.php中

session_start();
$users_email_address = 'example@example.org'; // source from DB or whatever
$_SESSION['email_address'] = $users_email_address;

page2.php和/或page3.php

session_start();
echo $_SESSION['email_address'];

有关更多示例,请参阅手册documentation for session_start()

使用HTTP GET参数

这最适合您可能想要分享的网址 - 因此搜索结果页或可能是分页。

以这种方式传递用户详细信息并不理想,因为用户可以轻松更改浏览器地址栏中的URL。因此,他们可以将自己的电子邮件地址更改为别人,并欺骗您的脚本。

使用cookies

将用户数据存储在cookie中并不是一个好主意,因为用户可以编辑存储在计算机上的cookie。

此外,Cookie的大小限制为4KB,并随每个请求标头一起发送到服务器 - 从而减慢您的网站速度。

使用HTTP POST参数

这是最不推荐的方法。 POST用于接收数据以将其保存在服务器上而不用于导航。如果用户要按回page3.php,那么他们的浏览器会显示“您是否要重新填写此表单”消息。对于认为他们刚刚点击了链接而未提交表单的用户来说,这是非常不直观的。

答案 1 :(得分:0)

最佳做法是使用会话变量(例如$_SESSION['variable_name'];)。

如果您涉及表单提交,请使用POST方法。

如果您只通过设置参数获得简单信息,请使用GET方法。

答案 2 :(得分:0)

设置用户ID后,您想将其添加到会话中。会话基本上是一个可在所有页面上使用的变量。

设置会话时,您希望在页面的最顶部显示session_start();。它需要在<html>标记之前。

设置您的会话$_SESSION['user_id'] = 1;

然后,您可以在任何页面上调用会话的价值,例如echo 'User id: ' . $_SESSION['user_id'];

这将输出:用户ID:1

手册中有很多信息 - http://www.php.net/manual/en/book.session.php

答案 3 :(得分:0)

您可以使用其中任何一种。

<强>会话

这是最好的,因为电子邮件地址存储在服务器端。没有人能够掌握价值,并试图用它来做坏事。

获取

虽然这可以通过附加到page2.php?email=someone@example.com之类的网址来实现您的目的,但它在浏览器地址栏中很容易阅读。这就像你不将这个值存储在任何地方,只需在页面之间传递它。

发表

这与GET类似,但参数在引擎盖下传递。如果用户在他的浏览器中使用插件,用户仍然可以找到它。和GET一样,这里的值也没有真正存储在任何地方。但是,要执行POST,您需要在页面上添加表单。您可以将其视为要求用户输入其电子邮件地址的表单。

<form action="page2.php" method="post">
    <input type="text" name="email"/>
</form>

在上面的示例中,您可以通过执行email来阅读page2.php$_POST["email"]的值。

请注意,如果您将方法更改为get,则该方法与GET请求相同。

<form action="page2.php" method="get">
    <input type="text" name="email"/>
</form>

在这里,您可以通过执行email来阅读page2.php$_GET["email"]的值。

<强>缓存

这可以通过在用户的浏览器上存储值来实现。所有方法中推荐人数最少,因为默认情况下用户无需启用其Cookie功能。

答案 4 :(得分:0)

只是补充Treffynnon的答案: 实际上page2.php应该是page1.php

关于会话的手册: http://www.php.net/manual/pt_BR/function.session-start.php

session_start()必须在php之前的所有html代码或echo之前。换句话说:在生成html代码的所有内容之前。

答案 5 :(得分:0)

会话是最好的选择。因为会议是一个发明的解决方案 网页的STATELESS性质。

会话非常易于理解和使用。每个用户都有一个会话。