返回介绍

14.2PHP 中的 Cookie

发布于 2025-01-30 22:11:37 字数 3061 浏览 0 评论 0 收藏 0

这节我们通过一个用户首次登陆网站后,再次访问不需要重复输入用户名和密码的例子来学习 Cookie。
首先介绍一下 php 中设置 cookie 的方法。
php 中提供了一个函数来让我们设置 cookie,这个函数是:

bool setcookie  (
  string $名字
   , [ string $值]
   , [ int $过期时间  = 0]
   , [ string $路径]
   , [ string $域名]
   , [ bool $安全  = false]
   , [ bool $http 只读  = false]
);

参数 描述
$名字 必需。规定 cookie 的名称。
$值 可选。规定 cookie 的值。
$有效期 可选。规定 cookie 的有效期。
$路径 可选。规定 cookie 的服务器路径。
$域名 可选。规定 cookie 的域名。
$安全 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
$http 安读 可选。如果 true,那么 js 就无法读取改 cookie,增加安全性。

一般来说,我们其实用不到上面那么多参数,对于这个函数,我们一般这么用: setcookie(cookie 名,cookie 值,cookie 有效期);

没错,就那么 3 个。如此一来,我们就可以在服务端通过$_COOKIE['name'] 来读取 cookie 了。

以下是示例:
我们将文件名命名为:cookie.php。

我们来模拟我们在互联网上见到最常见的例子:输入用户名和密码,登陆成功的过程。

我们来建一个数据库 login,其中有表 user,有 username 和 passwd 这两个字段。

<?php
//第一次登陆的时候,通过用户输入的信息来确认用户
if ( ( $_POST['username'] != null ) && ( $_POST['password'] != null ) ) {
$userName = $_POST['username'];
$password = $_POST['password'];
//从 db 获取用户信息  
//PS:数据库连接信息改成自己的 分别为主机 数据库用户名 密码
$conn = mysqli_connect('host','user','passwd');

mysqli_select_db($conn,'login');

$sql = "select * from user where `username` = '$userName' ";
$res = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($res);
if ($row['passwd'] == $password) {
  //密码验证通过,设置 cookies,把用户名和密码保存在客户端
  setcookie('username',$userName,time()+60*60*24*30);//设置时效一个月,一个月后这个 cookie 失效
  setcookie('password',$password,time()+60*60*24*30);
  //最后跳转到登录后的欢迎页面
  header('location: welcome.php' . "?username=$userName");
}
}

//再次访问的时候通过 cookie 来识别用户
if ( ($_COOKIE['username'] != null)  && ($_COOKIE['password'] != null) ) {
$userName = $_COOKIE['username'];
$password = $_COOKIE['password'];

//从 db 获取用户信息
//PS:数据库连接信息改成自己的 分别为主机 数据库用户名 密码
$conn = mysqli_connect('host','user','passwd','login');
$res = mysqli_query($conn,"select * from user where `username` =  '$userName' ");
$row = mysqli_fetch_assoc($res);
if ($row['passwd'] == $password) {
  //验证通过后跳转到登录后的欢迎页面
  header('location: welcome.php' . "?username=$userName");
}
}

?>
<html>
<head>

</head>
<body>
<form action="" method="POST">
  <div>
    用户名:<input type="text" name="username" />
    密  码:<input type="text" name="password" />
    <input type="submit" value="登录">    
  </div>
</form>
</body>
</html>

跳转到的 welcome.php 代码

<?php
$user = $_GET['username'];
?>
<html>
<head>

</head>
<body>
welcome,<?php echo $user;?>
</body>
</html>

这样,当我第一次访问 cookie.php 的时候,我需要输入用户名和密码,输入完毕后跳转到了 welcome.php。然后我关闭浏览器,再次打开 cookie.php,这次没有要求我输入用户信息,而是直接跳转到了 welcome.php,因为之前我们存的 cookie 信息被浏览器自动发送到了服务端,服务端做完处理直接跳转到了 welcome.php,服务器认识我们了!知道我是之前那个登陆过的用户,这样我们就通过 cookie 技术让无状态的 HTTP 协议保持了状态。
照着这个做一遍,我相信你会用 cookie 了。

只不过!!!只不过!!!只不过!!!重要的事要说 3 遍,我们一般是不会把用户名和密码放到 cookie 中的,因为这并不安全,容易泄露自己的信息,请不要把重要的信息放到 cookie 中。我们这个只是一个学习 cookie 的例子。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文