牛骨文教育服务平台(让学习变的简单)

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的例子。