1.Cookie
1.1 cookie的含义
cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。
1.2 如何创建cookie
创建cookie可以使用setcookie()
函数或者header()
函数,函数需要在标签之前。
setcookie()
:其语法是:setcookie(name, value, expire, path, domain)
,其中name和value是必选,其他参数根据情况可选
// 示例:设置一个cookie,1小时后过期setcookie("user","Alice",time()+60*60);print_r($_COOKIE);
header()
:
// 示例:设置一个cookieheader('Set-cookie:username = Jack');print_r($_COOKIE);
1.3 取回cookie
// 方式一:查看单个echo $_COOKIE['user'],'';// 方式二:查看所有print_r($_COOKIE);
1.4 删除cookie
// 将cookie的过期时间设置为过去setcookie("user","Alice",time()-3600);print_r($_COOKIE);
1.5 更新cookie
// 更新cookiesetcookie("username","Lisa");// 设置cookie后第一次刷新浏览器,cookie在response headers这里,这表示服务器告知浏览器有一个cookie需要你来保存一下// 第二次刷新后,cookie就会存在于request headers这里了// 更新cookie时,参数要一一对应setcookie("username","Lisa666");
1.6 浏览器对cookie进行url编码
// setrawcookie():防止存放cookie时,浏览器对它进行URL编码// 先设置好两个示例cookie,开发工具中查看setcookie("user","小明");setcookie("email","666666@qq.com");// 然后使用setrawcookie()对cookie值更新setrawcookie("user","小王");setrawcookie("email","888888@qq.com");
2. Session
2.1 sessio的含义
PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
2.2 sessio的工作原理
Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。是由服务器端生成的。
2.3 开启sessio会话
在把用户信息存储到 PHP session 中之前,必须先启动会话,必须位于标签之前。
先找到php.ini,设置 session.auto_start = 0
开启sessio会话session_start();
2.4 设置sessio
// 开启会话session_start();// 设置session$_SESSION["user"] = "Alice";$_SESSION["email"] = "123456@qq.com";
2.5 取回sessio
// 开启会话session_start();// 设置session// $_SESSION["user"] = "Alice";// $_SESSION["email"] = "123456@qq.com";// 取回sessionecho $_SESSION['user'],'';echo $_SESSION['email'];
2.6 销毁sessio
// 开启会话session_start();// 设置session// $_SESSION["user"] = "Alice";// $_SESSION["email"] = "123456@qq.com";// 取回session// echo $_SESSION['user'],'';// echo $_SESSION['email'];// 销毁session// 方式一:销毁单个// unset($_SESSION['user']);// echo $_SESSION['user'],'';// echo $_SESSION['email'];// 方式二:销毁所有session_destroy();echo $_SESSION['user'],'';echo $_SESSION['email'];
3. 7天免登录案例
//模拟用户数据$users=[['username'=>'admin','password'=>'123456'],['username'=>'peter','password'=>'peter'],];//接收用户POST数据$username = trim($_POST['username']); //过滤空格$password = $_POST['password'];//清除cookie中所有用户信息-定义函数,方便调用function clearCookies(){setcookie("username"," ",time()-3600);setcookie("isLogin", " ", time()-3600);}//检查用户名密码function chkUser(string $user, string $pass, array $users){foreach($users as $vulue){if ($user === $vulue['username'] && $pass === $vulue['password']) {return true;}}return false;}if ($_GET['action'] == "chkLogin"){ //登录验证if (chkUser($username,$password,$users)) {clearCookies();setcookie("username",$username,strtotime(" +7 days"));setcookie("isLogin","1",strtotime(" +7 days"));header("Location:login.php?action=home");}else{exit('');}}elseif($_GET['action'] == "home"){ //首页if(isset($_COOKIE['username']) && $_COOKIE['isLogin'] == "1"){echo 'PHP中文网欢迎您'.$_COOKIE['username'].'|退出';}else{exit('');}}elseif($_GET['action'] == "logOUT"){ //退出clearCookies();header("Location:login.php");}?><!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head><style> .box{ max-width: 20em; margin: 0 auto; padding: 1.5em; border: 1px solid #ffffff; display:flex; flex-direction: column; line-height: 100%; } .box p{ text-align: center; } button{ width: 100%; height: 3em; font-size: 1.0em; font-weight: bold; } input{ width: 60px; height: 2em; }</style><body> <form action="?action=chkLogin" method="POST"></form> <div class="box"> <p>用户名:<input type="text" name="username"></p> <p>密码:<input type="text" name="password"></p> <p><button>提交</button></p> </div></body></html>
总结:
通过cookie保存用户信息实现7天免登录