会话变量或cookie

时间:2013-06-14 08:28:14

标签: php javascript

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

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

但令人困惑的是,是否在php中设置session variable或使用cookies(但如果用户禁用了cookie?)或者还有其他简单方法吗?

我的方法

在php中创建一个会话变量并设置其值。现在,当用户打开registration.php检查变量isset()时是否设置了welcome.php

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

我的想法是尽可能减少服务器所做的工作。谢谢。也让我知道cookiessessions是什么,我们何时需要它们以及它们的独特性。

4 个答案:

答案 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是服务器端的,不能被客户端篡改。所以我建议你最好使用一个会话来检查他是否登录。