我有一个网页welcome.php
,用户在welcome.php
页面上输入了一些信息并提交了数据,它通过registration.php
将用户数据发布到$_POST['data']
页面。这是基本概念。
但是,如果用户通过某些搜索引擎或任何其他方式打开我的registration.php
。我可以将他重定向到欢迎页面吗?答案是Yes
我知道它可能。
但令人困惑的是,是否在php中设置session variable
或使用cookies
(但如果用户禁用了cookie?)或者还有其他简单方法吗?
我的方法
在php中创建一个会话变量并设置其值。现在,当用户打开registration.php
检查变量isset()
时是否设置了welcome.php
我不知道这是否是一个好主意。我不知道是否有更简单的方法可以做到。请告诉我最好的方法。
我的想法是尽可能减少服务器所做的工作。谢谢。也让我知道cookies
和sessions
是什么,我们何时需要它们以及它们的独特性。
答案 0 :(得分:1)
会话和Cookie类似于会话依赖于Cookie的方式。编辑:@swapnesh的有效评论 - 如果用户禁用了cookie,会话仍然可以通过在URL中发送会话ID而不是在cookie中发送。
Cookie是用户用户代理(浏览器)中设置的值。您的PHP脚本将使用HTTP标头设置它。具体来说,它将是Set-Cookie
标题(有关详细信息,请参阅RFC 6265, 4.1)。在UA提出的任何后续要求中,它也会在标头中发送Cookie(使用Cookie
标题,RFC 6265, 4.2)。您使用cookie设置的值将直接存储在UA中。
会话是存储在与客户端cookie关联的服务器上的一些数据。该会话可以存储在服务器的内存中或某些持久位置(例如数据库)中。如果您使用会话,PHP将为您设置cookie,但这次它不会包含您设置的值,而是包含一些ID。稍后,在另一个请求中,PHP将读取此cookie并使用ID在服务器端查找相应的数据。
关于您的具体问题 - 如果用户通过某些搜索引擎或其他(无效)方式访问registration.php,则此请求将是POST,或者它不包含所需的表单字段。所以你可以做的只是验证registration.php中的参数,如果不存在,请将用户重定向到welcome.php。即使没有cookie /会话也可以。如果您的用例可以接受此方法,请查看http_redirect()。此方法将使用示例HTTP 301或HTTP 307响应。
答案 1 :(得分:0)
我认为您尝试解决的问题不会通过Cookies
或$_SESSION
变量来解决。如果您确定the user came from a search engine
是否要检查引荐来源是什么,即查看它是否来自搜索引擎。推荐人基本上是“将用户发送到此页面的页面。”
您可以查看$_SERVER['HTTP_REFERER']
来查看此内容,然后您可以preg_match()
或其他内容查看是来自Google还是Bing。
您还可以使用其他条件the user has never been to the site before
将其重定向到欢迎页面。您可以通过在第一次访问时设置cookie,发送到欢迎页面,然后在每个页面访问时使用检查来确定是否设置了cookie来决定是否显示欢迎,还是只是页面。你不想在这里使用会话。
要回答关于“服务器做少工作”的问题,获胜者在技术上会是cookie,但您不应该基于此做出决定,因为它可以忽略不计。
答案 2 :(得分:0)
如果我弄错了,请纠正我....
如果您通过GET或POST方式通过表单向其他页面发送信息, 在目标页面上(registration.php)您可以简单地检查是否设置了基本变量。 e.g:
if (isset($_POST['user'])){//Check as many variables as You want with AND operator here
##Your code here...
##Here You'll store or manipulate Your properly received values...
##eg:
$user = $_POST['user'];
$email = $_POST['email'];
}
else {
header( 'Location: welcome.php' );//redirecting
}
希望它有所帮助。
答案 3 :(得分:-1)
Cookie是客户端的,它们很容易被客户端篡改,但Sessions是服务器端的,不能被客户端篡改。所以我建议你最好使用一个会话来检查他是否登录。