使用 PHP 创建和操作 Cookie
Creating and Manipulating Cookies Using PHP
我正在研究一个涉及创建初始 cookie (nag) 的迷你项目,该 cookie 跟踪用户访问该页面的次数,每五次,它会提示用户通过显示注册表单进行注册。如果他们决定跳过它,计数器会重置并重新开始。但是,如果用户决定注册,我需要做的就是删除 nag cookie,并用一个包含用户名和一个用于电子邮件的 cookie 替换它。因此,当用户返回网页时,它会显示一条类似 Hello Name (Email)
的消息,而不是计数器和表格。
我设法让 nag cookie 工作,但是当用户将数据输入表单并注册时,nag cookie 会重新开始而不是被删除,它不会显示 Hello 部分,而是继续计数器。它还为我提供了 Chrome 上的 Confirm Form Resubmission
面板。我不知道为什么。
<?php
if(isset($_POST['submit'])){
setcookie("register", 1);
$_COOKIE['register'] = 1;
setcookie("username", $_POST['username']);
$_COOKIE['username'] = $_POST['username'];
setcookie("email", $_POST['email']);
$_COOKIE['email'] = $_POST['email'];
setcookie("nag","", time()-3600);
$_COOKIE['nag'] = time()-3600;
}
if(isset($_COOKIE['register'])){
$user = $_COOKIE['username'];
$email = $_COOKIE['email'];
}else{
if(isset($_COOKIE['nag'])) {
$_COOKIE['nag']--;
setcookie("nag", $_COOKIE['nag']);
}else{
setcookie("nag", 5);
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Lab 5</title>
</head>
<body>
<?php
if(isset($_COOKIE['register'])){
echo "<p>Welcome back $user ($email)</p>";
}else{
echo $_COOKIE['nag'];
if($_COOKIE['nag'] == "0"){
setcookie("nag", 5);
echo "<br>Please Register, otherwise continue refreshing.";
echo"<form action='$_SELF' method='POST'>";
echo "Username: <input type='text' name='username' value=''<br><br>Email: <input type='text' name='email' value=''<br><br> <input type='submit' name='submit' value='Register'>";
echo "</form>";
}
}
?>
<p>Hello</p>
</body>
</html>
刷新页面将重新提交以前的表单数据(因此 chrome 中的消息),这将再次触发您的 isset($_POST['submit'])
。您可以在成功提交表单后使用重定向来解决此问题。示例:
if (isset($_POST['submit'])) {
setcookie("register", 1);
setcookie("username", $_POST['username']);
setcookie("email", $_POST['email']);
setcookie("nag", "", time() - 3600);
header('Location: index.php');
exit;
}
...
setcookie()
仅影响发送到客户端的 HTTP cookie header,新的 cookie 值将在下一个请求的 PHP 中可见。
$_COOKIE
变量在 Web 服务器从客户端收到的 cookie header 收到的每个请求的开头填充。
这意味着 setcookie()
不会更新 $_COOKIE
。
您需要像这样更改 cookie 更改代码:
if(isset($_POST['submit'])){
setcookie("register", 1);
$_COOKIE['register'] = 1;
setcookie("username", $_POST['username']);
$_COOKIE['username'] = $_POST['username'];
setcookie("email", $_POST['email']);
$_COOKIE['email'] = $_POST['email'];
setcookie("nag","", time()-3600);
$_COOKIE['nag'] = time()-3600);
}
因此,如果您在处理请求时修改了 cookie 数据,并且想在同一个请求中访问更新后的数据,请记得将更改也应用到 $_COOKIE
变量。
我正在研究一个涉及创建初始 cookie (nag) 的迷你项目,该 cookie 跟踪用户访问该页面的次数,每五次,它会提示用户通过显示注册表单进行注册。如果他们决定跳过它,计数器会重置并重新开始。但是,如果用户决定注册,我需要做的就是删除 nag cookie,并用一个包含用户名和一个用于电子邮件的 cookie 替换它。因此,当用户返回网页时,它会显示一条类似 Hello Name (Email)
的消息,而不是计数器和表格。
我设法让 nag cookie 工作,但是当用户将数据输入表单并注册时,nag cookie 会重新开始而不是被删除,它不会显示 Hello 部分,而是继续计数器。它还为我提供了 Chrome 上的 Confirm Form Resubmission
面板。我不知道为什么。
<?php
if(isset($_POST['submit'])){
setcookie("register", 1);
$_COOKIE['register'] = 1;
setcookie("username", $_POST['username']);
$_COOKIE['username'] = $_POST['username'];
setcookie("email", $_POST['email']);
$_COOKIE['email'] = $_POST['email'];
setcookie("nag","", time()-3600);
$_COOKIE['nag'] = time()-3600;
}
if(isset($_COOKIE['register'])){
$user = $_COOKIE['username'];
$email = $_COOKIE['email'];
}else{
if(isset($_COOKIE['nag'])) {
$_COOKIE['nag']--;
setcookie("nag", $_COOKIE['nag']);
}else{
setcookie("nag", 5);
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Lab 5</title>
</head>
<body>
<?php
if(isset($_COOKIE['register'])){
echo "<p>Welcome back $user ($email)</p>";
}else{
echo $_COOKIE['nag'];
if($_COOKIE['nag'] == "0"){
setcookie("nag", 5);
echo "<br>Please Register, otherwise continue refreshing.";
echo"<form action='$_SELF' method='POST'>";
echo "Username: <input type='text' name='username' value=''<br><br>Email: <input type='text' name='email' value=''<br><br> <input type='submit' name='submit' value='Register'>";
echo "</form>";
}
}
?>
<p>Hello</p>
</body>
</html>
刷新页面将重新提交以前的表单数据(因此 chrome 中的消息),这将再次触发您的 isset($_POST['submit'])
。您可以在成功提交表单后使用重定向来解决此问题。示例:
if (isset($_POST['submit'])) {
setcookie("register", 1);
setcookie("username", $_POST['username']);
setcookie("email", $_POST['email']);
setcookie("nag", "", time() - 3600);
header('Location: index.php');
exit;
}
...
setcookie()
仅影响发送到客户端的 HTTP cookie header,新的 cookie 值将在下一个请求的 PHP 中可见。
$_COOKIE
变量在 Web 服务器从客户端收到的 cookie header 收到的每个请求的开头填充。
这意味着 setcookie()
不会更新 $_COOKIE
。
您需要像这样更改 cookie 更改代码:
if(isset($_POST['submit'])){
setcookie("register", 1);
$_COOKIE['register'] = 1;
setcookie("username", $_POST['username']);
$_COOKIE['username'] = $_POST['username'];
setcookie("email", $_POST['email']);
$_COOKIE['email'] = $_POST['email'];
setcookie("nag","", time()-3600);
$_COOKIE['nag'] = time()-3600);
}
因此,如果您在处理请求时修改了 cookie 数据,并且想在同一个请求中访问更新后的数据,请记得将更改也应用到 $_COOKIE
变量。