会话变量或cookie

session variable or cookies

本文关键字:cookie 变量 会话      更新时间:2023-09-26

我有一个网页welcome.php,用户在welcome.php页面输入一些信息并提交数据,它通过$_POST['data']将用户数据发布到registration.php页面。这是基本的概念。

但是如果用户通过一些搜索引擎或任何其他方式打开我的registration.php。我能把他重定向到欢迎页面吗?答案是Yes我知道这是可能的。

但混乱是是否设置session variable在php或使用cookies(但如果用户禁用cookie ?)或有任何其他简单的方法来做到这一点?

我的方法

在php中创建一个会话变量并设置它的值。现在,当用户打开registration.php检查变量isset(),如果它没有设置重定向到welcome.php

我不知道这样做是否是个好主意。我不知道是否有更简单的方法。请告诉我最好的办法。

我想的是尽可能减少服务器完成的工作。谢谢。也让我知道cookiessessions是什么,什么时候我们需要它们,它们的独特性是什么。

会话和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响应示例。

如果我说错了请指正....

如果您通过GET或POST方法将一个页面的信息发送给其他表单,在目标页面(registration.php)上,您可以简单地检查是否设置了一个基本变量。例如:

    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
}

希望能有所帮助。

我不认为你要解决的问题是要用Cookies$_SESSION变量来解决。如果你在检查是否the user came from a search engine上是dead-set,你想检查推荐人是什么,即看看它是否来自搜索引擎。引荐者基本上是"哪个页面将用户发送到这个页面"。

你可以检查$_SERVER['HTTP_REFERER'],你可以做preg_match()或其他东西,看看它是否来自谷歌,或必应。

您还可以使用不同的条件the user has never been to the site before将它们重定向到欢迎页面。您可以这样做:在第一次访问时设置一个cookie,发送到欢迎页面,然后在每次页面访问时检查是否设置了cookie,以决定是显示欢迎还是只显示页面。你不会想在这里使用会话的。

要回答你关于"服务器做的工作更少"的问题,从技术上讲,赢家是cookie,但你不应该根据这个做出决定,因为它是微不足道的。

cookie是客户端,可以被客户端轻易篡改,但是session是服务器端,不能被客户端篡改。所以我建议最好使用会话来检查他是否登录了。