我试图了解setcookie()如何在php中工作,所以我制作了一个简单的脚本用于测试目的。脚本唯一要做的就是询问用户名,然后为它制作一个cookie。当您再次输入相同的用户名时,它应该欢迎您回来。如果这是您第一次输入该用户名,它应该第一次欢迎您。这就是我的所作所为:
这是表格;
<!DOCTYPE html>
<html lang="nl">
<head>
<title>XXL Computer winkel</title>
</head>
<body>
<h3>php lab 12</h3>
<table border=0 cellpadding=0 cellspacing=0 >
<form name="orderform" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<tr>
<td>gebruikersnaam</td>
<td><input type="text" name="user" /></td>
<td><input type="submit" name="send" value="inloggen" /> </td>
</tr>
</form>
</table>
<?php
include ("cookiefuncties.php");
welkom();
?>
</body>
</html>
cookiefuncties.php看起来像这样:
<?php
function welkom()
{
if(isset($_POST['user']))
{
$cookie_value = $_POST['user'];
$cookie_name = "gebruikersnaam";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
}
if(isset($_POST['user'])&& $_COOKIE[$cookie_name] === ($_POST['user']))
{
echo "Welcome back " . $_COOKIE[$cookie_name] . "!";
}
if(isset($_POST['user'])&& $_COOKIE[$cookie_name] != ($_POST['user']))
{
echo "Welcome " . $_COOKIE[$cookie_name] . "This is your first visit";
}
}
?>
问题是,Cookie始终是“迟到的一个名字”。因此,我需要刷新页面,它将始终欢迎用户回来,而不是说它是第一次访问。我知道可以选择“强迫”刷新,但我不知道如何,如果这是解决方案。
问候, 伦纳特
PS。不要介意间距。我仍然不知道如何在这个网站上做到这一点: - (
答案 0 :(得分:2)
您必须为每个用户保留一个Cookie。只需为每个新用户设置值为true
的Cookie即可。在cookiefuncties.php
:
<?php
function welkom() {
if(isset($_POST['user'])) {
$cookie_name = $_POST['user'];
setcookie($cookie_name, true, time() + (86400 * 30), "/");
if( isset($_COOKIE[$cookie_name]) && true == $_COOKIE[$cookie_name]) {
echo "Welcome back " . $_POST['user'] . "!";
} else {
echo "Welcome " . $_POST['user'] . "This is your first visit";
}
}
}
?>
答案 1 :(得分:1)
设置每个用户cookie的唯一名称并检查它是否存在。
if(isset($_POST['user']) and !empty($_POST['user']))
{
$user = $_POST['user'];
// set the unique cookie name
$cookie_name = "gebruikersnaam_$user";
$setCookie = true;
if(isset($_COOKIE[$cookie_name]) and $_COOKIE[$cookie_name] = $user )
{
echo "Welcome Back ".$user;
}else
{
echo "This is your first visit $user";
}
setcookie($cookie_name, $user, time() + (86400 * 30), "/");
}