1

我是初学者 PHP 程序员,我不能设置 cookie。

我不断收到此错误:

注意:未定义索引:第 28 行 D:\XAMPP\htdocs\Bank\verify.php 中的用户

注意:未定义索引:在第 28 行传入 D:\XAMPP\htdocs\Bank\verify.php

在代码中,我只是在表单中设置了一个值为$_POST['user']and的 cookie$_POST['pass']并将其打印出来,但它不起作用。

setcookie("user",$_POST['user'],3600);
setcookie("pass",$_POST['pass'],3600);
echo $_COOKIE["user"] . " " . $_COOKIE["pass"];  // This is line 28

这是我的表格:

<form action="verify.php" method="post">
    Username: <input name="user" /><br />
    Password: <input name="pass" type="password" /><br />
    <input type="submit" value="Submit" />
</form>

有人知道为什么会这样吗?请帮忙。

谢谢。

4

4 回答 4

1

下次访问该页面时会使用 Cookie。所以有 3 种通用解决方案: 1. 将其保存到 cookie 中,第一次只回显 POST 变量而不是 COOKIE。代码将如下所示:

setcookie('user', $_POST['user'], time()+3600); // notice time() function
setcookie('pass', $_POST['pass'], time()+3600); // you cant use absolute value here

if (!isset($_COOKIE['user'])) echo $_POST['user'] . ' ' . $_POST['pass'];
    else echo $_COOKIE['user'] . ' ' . $_COOKIE['pass'];

,但如果你真的想将密码存储在 cookie 中(非常糟糕的主意),那么至少要对其进行哈希处理。带有散列的代码可能如下所示:

setcookie('pass', hash(whirlpool/*algorithm*/, $_POST['pass']/*text*/), time()+3600);

,然后当您检查密码时,只需对其进行散列并比较散列即可。


2. 解决方案是会话,但它只会在您关闭浏览器之前起作用,然后整个会话被删除。
3. 可能最好的解决方案是将用户+密码存储在 mySQL 数据库或服务器端的 .txt 文件中。不过,不要忘记对其进行哈希处理,因为即使在数据库中,也有人可以使用一些黑客来窃取这些信息。即使您认为您的网络是安全的——安全总比后悔好。
这就是你的解决方案。只是一个简短的说明:如果您想将密码存储到任何重要的东西,请始终对其进行哈希处理,最好使用加盐哈希。试着google一下,网上有很多关于hash的文章。看这个网站: http: //php.net/manual/en/faq.passwords.php

于 2013-08-08T15:05:19.167 回答
0

您不能在同一个请求中发送和接收 cookie。这是您应该尝试的修改

if(isset($_POST['user']) && isset($_POST['pass'])){

setcookie("user",$_POST['user'],3600);
setcookie("pass",$_POST['pass'],3600);

header("location:".$_SERVER['PHP_SELF']);

}
if(isset($_COOKIE['user']) && isset($_COOKIE['user']))
{
echo $_COOKIE["user"] . " " . $_COOKIE["pass"];  // This is line 28

}

但是,建议改用会话。首先通过PHP_SESSION

于 2013-08-08T14:15:19.120 回答
0
setcookie();

告诉 PHP在下次向浏览器发送响应时向浏览器发送 cookie

$_COOKIE

是浏览器向 PHP 发送请求时从浏览器收到的 cookie

您正在尝试在同一个请求中设置和接收

编辑

PS 我知道你只是在学习,但我希望你不打算将用户名和密码存储在互联网上的每个人都可以看到的 cookie 中

于 2013-08-08T12:46:22.000 回答
0

$_COOKIE仅适用于在请求中(从 Web 客户端)传递到脚本的 cookie,而不是您在脚本中设置的要发送到客户端的 cookie。所以“用户”和“通行证”只有在您将它们发送给客户端并且客户端将它们发送回之后$_COOKIE才会出现。

另外,告诉我你没有在cookie中设置密码?这是非常糟糕的安全性,因为 cookie 不是远程安全的。通常的技术是创建一个仅在 Web 服务器上存储数据的 PHP 会话,然后将会话 ID 放入 cookie 中。有关 PHP 会话的信息,请参阅php 在线手册

于 2013-08-08T12:47:45.453 回答