cookie是一个预定义的变量,其内容由 名 + 值 对组成。php脚本中的变量都是存储在服务器端, 写在客户端浏览器中的变量就是cookie。
提出问题:
1. 为什么要用cookie?
2. cookie由谁来创建?
一、为什么要用cookie?
cookie的作用在与让服务器知道客户端是谁(哪一个)。在进行交互的时候能更精准的传递正确信息到正确的客户端。同时在浏览器访问同个域名的不同页面时,实现多个页面数据的共享。
二、cookie由谁来创建?
1. 当浏览器打开一个网站时,浏览器会自动为当前域名在本地主机创建一个cookie,通常叫 uid:用户id,这是一个绝对不会重复的字符串值,用来识别访问者。
2. 接着cookie就与客户端无关了,全部由服务器上的程序控制(由服务器上应用来设置)
在浏览器中查看
<?php
// setcookie() 接收7个参数
// 1.name: Cookie名称;
// 2.value: Cookie值,这个值储存于用户的电脑里,请勿储存敏感信息。
// 3.expire: Cookie 的过期时间,这是个从1970 年 1 月 1 日 00:00:00到现在的时间戳(秒数)。
// 也就是说,基本可以用 time() 函数的结果加上希望过期的秒数。
// 4.path: Cookie 有效的服务器路径。 设置成 '/' 时,Cookie 对整个域名 domain 有效。 如果设置成 '/foo/', Cookie
// 仅仅对 domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。 默认值是设置 Cookie 时的当前目录。
// 5.domain: Cookie 的有效域名/子域名。设置成子域名(例如 'www.example.com'),会使 Cookie
// 对这个子域名和它的三级域名有效(例如 w2.www.example.com)。 要让 Cookie 对整个域名有效(包括它的全部子域名),
// 只要设置成域名就可以了(这个例子里是 'example.com')。
// 6.secure: 设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。 设置成 TRUE 时,只有安全连接存在时才会设置
// Cookie。 如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类 Cookie (通过 $_SERVER["HTTPS"] 判断)。
// 7.httponly: 设置成TRUE,Cookie仅可通过HTTP协议访问,这意思就是Cookie无法通过类似JavaScript这样的脚本语言访问。
// 要有效减少 XSS 攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议。
// PHP 5.2.0 中添加。 TRUE 或 FALSE
setcookie('cookieDemo','PHP Study Hard!');
echo $_COOKIE['cookieDemo'];
?>
接下来模拟一个登陆操作
模拟的登陆操作
我的文件目录
// cookie-demo.php
<?php
$action = $_GET['action'];
if($action=='login'){
if($_POST['name']=='user'&&$_POST['password']=='123456'){
setcookie('userName',$_POST['name'],time()+3600*24);// 设置cookie,有效期一天
header('Location:index.php'); // 导航到首页
}
}else if($action=='logout'){
setcookie('name','',time()-3600); // 注销cookie,设置过期时间
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆操作</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>?action=login" method='post'>
<fieldset>
<legend>用户登陆</legend>
<label for='name'>用户名</label>
<input type="text" name="name" id='name' placeholder="请输入用户名">
<br>
<label for='password'>密码</label>
<input type="password" name="password" id='password' placeholder="请输入密码">
<br>
<input type="submit" value="提交">
</fieldset>
</form>
</body>
</html>
// index.php
<?php
if(!isset($_COOKIE['userName'])){
header('Location:cookie-demo.php'); // 未登录,跳转到登陆页面
}else{
echo '欢迎'.$_COOKIE['userName'].'回到首页!';
}
?>
先输入错误的用户名,密码,弹出登录失败提示
输入正确的 user,123456,登陆成功,cookie值出现了