14.2PHP 中的 Cookie
这节我们通过一个用户首次登陆网站后,再次访问不需要重复输入用户名和密码的例子来学习 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论