好吧,我刚刚开始研究服务器端脚本,我选择了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
,有些人说POST
和GET
方法。有些人说当你使用GET或POST方法时很容易入侵,有些人回答Cookies是客户端,它与服务器断开连接,在听完所有我决定使用的session_start()
但是作为一个新手,我不知道该选择什么,这是最好的方法。有人可以向我解释哪个是最好的解决方案,为什么?还请提供一些示例,以便我能更好地理解它。非常感谢任何帮助。谢谢
答案 0 :(得分:0)
按照优先顺序排列您在问题中提出的问题。
由于这是当前用户的详细信息,因此最简单的方法是使用PHP会话。这将允许您从任何调用$_SESSION
DOCs函数的页面访问名为session_start()
DOCs的超级全局数组中的详细信息。这应该在任何输出发送到浏览器之前出现,因此它通常放在PHP脚本的最顶层。
每个用户在服务器上都有自己的会话,session_start()
自动为您的脚本提供当前用户的正确数据。
session_start();
$users_email_address = 'example@example.org'; // source from DB or whatever
$_SESSION['email_address'] = $users_email_address;
session_start();
echo $_SESSION['email_address'];
有关更多示例,请参阅手册documentation for session_start()
。
这最适合您可能想要分享的网址 - 因此搜索结果页或可能是分页。
以这种方式传递用户详细信息并不理想,因为用户可以轻松更改浏览器地址栏中的URL。因此,他们可以将自己的电子邮件地址更改为别人,并欺骗您的脚本。
将用户数据存储在cookie中并不是一个好主意,因为用户可以编辑存储在计算机上的cookie。
此外,Cookie的大小限制为4KB,并随每个请求标头一起发送到服务器 - 从而减慢您的网站速度。
这是最不推荐的方法。 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
答案 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性质。
会话非常易于理解和使用。每个用户都有一个会话。