我是一位经验丰富的程序员(自1974年以来!),他对使用高级网络技术(我了解HTML
,basic PHP
和MYSQL
的方式是相当陌生的)。我以前从未使用过Cookie,但似乎无法读取已设置的Cookie,这让我很困惑。
在这种情况下,将递归调用此页面来处理和显示表单。用户第一次显示该页面时,我正在寻找一个cookie(不应存在一个cookie)。用户填写表格并提交。表单操作再次调用该页面,然后我寻找一个cookie。仍然不是一个,但有$_POST
数据,因此我为用户设置了Cookie(此部分有效)。如果用户在提交表单后返回页面,则应该有一个cookie,并且我使用cookie值来查找用户并在表单中填充标识信息。
编写cookie即可。但是,当我再次访问该页面时,该cookie为空白。
我在浏览器(Chrome)中检查了内容设置; cookie在那里,并且具有必需的信息(并且尚未过期)。使用页面浏览器中的控制台功能,我可以看到该域中的所有cookie,但是无法访问该程序的特定cookie。我已经删除了Cookie,并经过几次例行程序以确保已重写Cookie,并且在下次访问时仍然没有Cookie。我已删除Cookie,并刷新了浏览器中的缓存,然后重试一次,但没有成功。我已经关闭浏览器,重新启动它,但仍然没有收到Cookie。我已经检查了php.ini文件,以确保正确设置了variables_order标志(显式EGPCS
)。我搜索了前面的问题,没有发现这里发生的事情(大多数与JS
相关,或者与在Cookie中设置路径有关)。
我在<html>
标记后添加了一些echo语句,以向我显示cookie处理的状态,并且始终表明$_COOKIE
为空(或不存在)。
因此,我在代码中忽略了一些东西。也许有人可以看到我不是。
这是代码(由于我的PHP
很弱,我直接使用JS-fu
):
<?php
//make sure I display errors
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
//cookie routine
//initialize variables
$cookie_name="SHS74"; //self-explanatory
$cookie_set=FALSE; //flag to help debugging
$returning=FALSE; //FALSE = no cookie, TRUE=cookie has been read
$returned_user=""; //value of the cookie
//actual routine
if(!isset($_COOKIE['$cookie_name'])) { //user has never submitted anything
if (isset($_POST['email_from'])) { //but has submitted a form this time – required field
setcookie ($cookie_name, $_POST['email_from'], time()+3600*24*30, '/'); //works
$returning=FALSE; //so I don’t look for database records for this user
$cookie_set=TRUE; //flag to help debugging
} // end of if $_POST[ email_from] - note: if not isset $_POST[‘email_from’], I can safely fall through since flags are already initialized to FALSE
} //if not isset
else { //the user has a cookie
$returned_user = $_COOKIE['$cookie_name']; //who the user is
$returning=TRUE; //user has been here before, submitted a form, and has a database record
} //end else
//database initialization
session_start();
include("connection.php");
?>
<!DOCTYPE HTML>
<html>
<head>
[...片段...]
(是的,很老的学校)
那么,我在做什么错?是我错过了配置错误,还是在一开始就搞砸了$_COOKIE
的处理?
谢谢!
2018年8月10日11:00edt-根据建议,在'isset'测试中我删除了$ cookie_name附近的单引号,其他地方我引用了$ _COOKIE。有效!谢谢。是的,这对我来说是全新的-我以前的Web建设经验非常基础-没有数组处理,没有Cookie,因此我的学习曲线非常艰难。感谢所有提供帮助的人!