Php 在表单密码正确时设置cookies
我有一个表单,当用户输入“Test”时,它应该创建一个cookie,并使用Php 在表单密码正确时设置cookies,php,cookies,setcookie,Php,Cookies,Setcookie,我有一个表单,当用户输入“Test”时,它应该创建一个cookie,并使用require函数加载模板。一旦启用cookie,它就会显示模板。如果cookie过期,则需要再次输入密码。换句话说,如果密码是“Test”,我希望在再次请求密码之前,在用户浏览器中包含该模板12小时 下面是我正在尝试的。更多关于饼干的信息 问题是cookie的想法不起作用 在下一页请求之前,$\u cookie超全局中的cookie值不会被填充 使用setcookie时,服务器将尝试向客户端发送cookie。如果coo
require
函数加载模板。一旦启用cookie,它就会显示模板。如果cookie过期,则需要再次输入密码。换句话说,如果密码是“Test”,我希望在再次请求密码之前,在用户浏览器中包含该模板12小时
下面是我正在尝试的。更多关于饼干的信息
问题是cookie的想法不起作用
在下一页请求之前,$\u cookie
超全局中的cookie值不会被填充
使用setcookie
时,服务器将尝试向客户端发送cookie。如果cookie在后续客户端请求时未过期,则客户端将呈现该cookie。然后,Php将使用此值填充$\u COOKIE
超全局
换句话说:setcookie('foo','bar'等)
不会立即填充$\ucookie['foo']
您当前嵌套的模板调用如下所示:
if($code === "test") {
if(isset($_COOKIE[$cookie_name])) {
require_once 'template.php';
}
}
这要求您的秘密是“测试”(来自表单帖子),并且设置了$\u COOKIE['user']
。因此,除非在设置cookie(至少两次成功的表单提交和验证)后提交具有正确值的表单,否则模板将不会被包括在内
如果在setcookie之后重定向,则可以更多地依赖$\u COOKIE
。请注意,Cookie可能会被欺骗:
<?php
$cookie_name = "user";
$cookie_value = "Cookie";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$secret = isset($_POST['secret']) ? $_POST['secret'] : null;
$forget = isset($_POST['forget']) ? $_POST['forget'] : null;
if($secret === "test") {
$cookie_expiry = time() + (24*60*60); // +1 day
setcookie($cookie_name, $cookie_value, $cookie_expiry , "/");
// Redirect here.
exit;
}
if($forget) {
$cookie_expiry = time() - (24*60*60); // -1 day
setcookie($cookie_name, '', $cookie_expiry , "/");
// Redirect here.
exit;
}
}
if(isset($_COOKIE[$cookie_name])) {
echo 'Cookie set.';
}
?>
<form method="post" action='<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>'>
<label for="secret">Secret:</label>
<input name="secret" type="text" required>
<input type="submit" value="Check in">
</form>
<form method="post">
<input type="submit" name="forget" value="Forget me">
</form>
这也将有助于:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$cookieName = 'User';
if (isset($_POST['SecretCode']) && ($_POST['SecretCode'] == 'test')) {
echo 'Password correct.<br>';
setcookie($cookieName,'Cookie',time()+86400,'/'); // 86400 = 1 day
echo 'Cookie was set.<br>';
echo 'Require template here.<br>';
} elseif (isset($_COOKIE[$cookieName])) {
echo 'Require template here as well.<br>';
echo 'Cookie value: ['.$_COOKIE[$cookieName].']<br>';
}
?>
<form method="post">
<input name="SecretCode" type="text" required>
<button>Check password</button>
</form>
检查密码
在php尝试设置cookie之前,是否有任何html输出?我遇到的问题是cookie的想法不起作用。如果你评论所有与cookies有关的东西,并尝试它的工作原理,你就会有一个想法。我想做的就是弄清楚。用户将输入密码,如果密码正确,模板将加载到其浏览器中。我只想实现Cookie。检查php错误日志你根本帮不了我我问过在setcookie
之前是否有html-没有回答,所以我让你检查错误日志。在任何html输出之后使用setcookie
都会导致错误有一个问题。我需要提交3次密码才能工作。当我删除浏览器的缓存cookies时,我不明白为什么你需要提交三次密码?你打对了吗?缓存和cookie是两种不同的东西。您使用的是哪种浏览器?@Progrock:我听从了您的建议。@KIKOSoftware,回音线对我来说仍然在setcookie的上方。我也不知道,有时它会进行1次提交,有时需要单击两下才能加载模板@KIKOSoftware。事实上,当我按下回车键时,需要两次。当我点击按钮时,它会正常进行
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$cookieName = 'User';
if (isset($_POST['SecretCode']) && ($_POST['SecretCode'] == 'test')) {
echo 'Password correct.<br>';
setcookie($cookieName,'Cookie',time()+86400,'/'); // 86400 = 1 day
echo 'Cookie was set.<br>';
echo 'Require template here.<br>';
} elseif (isset($_COOKIE[$cookieName])) {
echo 'Require template here as well.<br>';
echo 'Cookie value: ['.$_COOKIE[$cookieName].']<br>';
}
?>
<form method="post">
<input name="SecretCode" type="text" required>
<button>Check password</button>
</form>