php:设置cookie并检索它们?

时间:2012-04-01 08:31:55

标签: php cookies login

我正在使用php创建一个登录系统,当我提交正确的信息时,它会设置一个cookie。表单操作发送到同一页面,其中有一个isset cookie验证在顶部,但由于cookie在设置后需要刷新,您需要再次刷新页面,以便它可以注意到cookie在那里。

它的解决方法是什么?这是我的代码(其中用户名和密码是“admin”,就像占位符一样。当我让系统工作时,我会从数据库中提取值。)

<?php 
if(isset($_COOKIE['user']))
{ 
echo "Hello, administrator.<br />";
echo "<a href=?logout=yes>logout</a>";
if(isset($_GET['logout']))
{
    setcookie("user", $_POST['username'], time() - 3600); 
}
}
else
{
 if (isset($_POST['submit'])) 
 {
     if (($_POST['username']=="admin")&&($_POST['password']=="admin"))
     {
          setcookie("user", $_POST['username'], time() + 3600); 
     }
     else
     {
         echo "empty field or wrong user/pass.";
     }
 }
 else
 {
     echo "nothing submitted. show form.";
 }
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
<table border="0"> 
<tr><td colspan=2><h1>Login</h1></td></tr> 
<tr><td>Username:</td><td> 
<input type="text" name="username" maxlength="40"> 
</td></tr> 
<tr><td>Password:</td><td> 
<input type="password" name="password" maxlength="50"> 
</td></tr> 
<tr><td colspan="2" align="right"> 
<input type="submit" name="submit" value="Login"> 
</td></tr> 
</table> 
</form> 

3 个答案:

答案 0 :(得分:1)

除非你绝对需要使用自定义cookie,否则我建议使用$ _SESSION全局。设置后,$ _SESSION数据即可使用。但其更重要的特征是数据不存储在客户端上。简单来说,用户永远无法访问其数据。所以很难破解你的登录系统。正如其他人所指出的,使用cookie,任何人都可以阅读和编辑数据!

session_start();

if (isset($_GET['logout']))
{
    unset($_SESSION['username']);
}
if ($_SESSION['username'] == 'admin')
{
    echo "hello admin!";
}
else if (($_POST['username']=="admin")&&($_POST['password']=="admin"))
{
     $_SESSION['username'] = $_POST['username'];
}

要使用$ _SESSION全局变量,您需要将session_start()放在脚本的开头(在发送任何数据之前)。它应该同时解决您的重定向问题。请注意,在场景后面,$ _SESSION使用一个小cookie,但你真的不必考虑它。它只包含一个小ID。

有关会话的更多信息

http://www.php.net/manual/en/book.session.php

PS:说实话,我仍然会在这里使用重定向。当您发布表单并按后退按钮时,浏览器会要求您再次发送数据并且令人讨厌。使用header("Location: " . $newUrl);重定向可以消除这种烦恼。但只是我的2美分。

答案 1 :(得分:0)

$loggedin = false;
if(isset($_POST['submit'])) {
 // Do login checking and set cookies
 $loggedin = true; // if the case
}else if(isset($_COOKIE['username']) && isset($_COOKIE['password'])) {
  // Check if valid login
  $loggedin = true; // if the case
}else{
  // They are not logged in.
}

然后使用变量$登录来查看他们是否已登录。我建议创建一个用户类来处理这个问题,所以你在文件中一遍又一遍地使用相同的代码。

答案 2 :(得分:0)

您可以创建自己的功能来设置Cookie,即:

function my_setcookie($name,$value,$expire){
    $_COOKIE[$name] = $value;
    return setcookie($name,$value,$expire);
}

但更好的想法是在成功的'POST'请求后重定向用户,因此如果刷新页面,浏览器将不会抱怨重发POST数据。