博客列表 >PHP 08 cookie、session的操作(会话控制)(0714tue)

PHP 08 cookie、session的操作(会话控制)(0714tue)

老黑
老黑原创
2020年07月19日 14:07:25583浏览

主要内容:

  1. cookie的创建、查看、更新、删除
  2. cookie的运作原理
  3. session操作:创建、销毁
  4. 实战:网站的简单登陆。
  1. // ① cookie的设置
  2. //设置发送cookie,不设置第三个参数,cookie由浏览器维护,浏览器关闭,cookie消失
  3. setcookie("username","Peter");
  4. //设置第三个参数,由硬盘保存
  5. setcookie("key","999",strtotime(" +7 days"));
  6. //header()函数来设置cookie
  7. header('Ser-cookie:a=4');
  8. // ② cookie的删除
  9. //删除cookie,把第三个参数设置为过去的时间,值设置为空
  10. setcookie("username","Peter");
  11. setcookie("username"," ",time()-3600);
  12. // ③ 更新cookie,参数要一一对应
  13. setcookie("username","Max");
  14. setcookie("username","MAX123");
  15. setcookie("a","5");
  16. setcookie("a","6",time()+300);
  17. // ④ 查看cookie
  18. $_COOKIE["username"]; //查看单个cookie
  19. print_r($_COOKIE); //查看所有的cookie
  • 一个知识点:setcookie(),setrawcookie()的区别
  1. //@会变成%40
  2. setcookie("email","54564151@qq.com");
  3. //正常显示。发送未经 URL 编码的 cookie
  4. setrawcookie("email","35121312@qq.com");
  1. setcookie("a","4");
  2. echo $_COOKIE['a'];

刷新浏览器才能获取cookie的值。示例:

服务器端:
第一步:服务器解析setcookie(‘aa’,’4’)
因为cookie是设置在客户端的,setcookie函数自己并不能设置cookie,
它只能通过头信息的方式告诉浏览器说:我要设置一个cookie,键为a,值为4,
你在你那里帮我设置一下。

第二步:服务器返回信息
其中返回的头信息中带有Set-Cookie a=4,浏览器收到这个头信息,
把cookie存放到客户端计算机的某个文件中

第三部:刷新浏览器,再次访问服务器的时候,同样,也会把很多头信息带给服务器,
只不过这次带过去的cookie中,就多了一个a=4了。
所以$_COOKIE[‘a’]自然就能从cookie字符串中找到这个键为a的cookie的值。
*/

3. session操作:创建、销毁

  1. session_start();//创建session 开始一个会话。进行session的初始化
  2. //session是基于cookie,在开启session之前不能有任何内容的输出
  3. //创建一个session
  4. $_SESSION["username"] = "Peter";
  5. $_SESSION["uid"] = 1;
  6. //销毁session,注销session变量
  7. session_destroy();//销毁和当前session有关的所有资料,并不会清空$_SESSION
  8. $_SESSION = array();//销毁和当前session有关的所有资料,并清空$_SESSION
  9. //reset也可以考虑。
  10. print_r($_SESSION);

4. 一个登录页面的操作

  • 因为没有涉及到数据库内容,因此相对简单一些。
  • login.php中的内容
  1. <?php
  2. //数据接收
  3. $username = $_POST['username'];
  4. $password = $_POST['password'];
  5. //检测到登录动作,清除cookie中所有的别的用户信息
  6. function clearCookies(){
  7. setcookie("username"," ",time()-3600);
  8. setcookie("isLogin", " ", time()-3600);
  9. }
  10. //用户登录
  11. if ($_GET['action'] == "login") {
  12. if ($username == "Peter" && $password == "123456") {
  13. clearCookies();
  14. setcookie("username",$username);
  15. setcookie("isLogin","1");
  16. header("Location:index.php");
  17. } else{
  18. exit("用户名或密码错误");
  19. }
  20. }
  21. //退出登录
  22. if ($_GET['action'] == "logOUT") {
  23. clearCookies();
  24. }
  25. ?>
  26. <!DOCTYPE html>
  27. <html lang="en">
  28. <head>
  29. <meta charset="UTF-8">
  30. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  31. <title>用户登录</title>
  32. </head>
  33. <body>
  34. <h1>用户登录</h1>
  35. <form action="login.php?action=login" method="post">
  36. <table border="1">
  37. <tr>
  38. <td>用户名</td>
  39. <td>
  40. <input type="text" name="username" placeholder="PLEASE ENTER YOUR USERNAME">
  41. </td>
  42. </tr>
  43. <tr>
  44. <td>密码</td>
  45. <td>
  46. <input type="password" name="password" placeholder="PLEASE ENTER YOUR PASSWORD">
  47. </td>
  48. </tr>
  49. <tr>
  50. <td align="center" colspan="2">
  51. <input name="sub" type="submit">
  52. </td>
  53. </tr>
  54. </table>
  55. </form>
  56. </body>
  57. </html>
  • index页面中的内容
  1. <?php
  2. //如果用户没有通过身份验证,页面跳转至登录页面
  3. if (!(isset($_COOKIE['isLogin']) && $_COOKIE['isLogin'] == "1")) {
  4. exit('
  5. <script>
  6. alert("请您先登录再访问主页");
  7. location.href="login.php";
  8. </script>
  9. ');
  10. }
  11. ?>
  12. <!DOCTYPE html>
  13. <html lang="en">
  14. <head>
  15. <meta charset="UTF-8">
  16. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  17. <title>淘宝宝首页</title>
  18. </head>
  19. <body>
  20. <h1>淘宝宝首页</h1>
  21. <?php echo "欢迎您". $_COOKIE['username'];?>
  22. <a href="login.php?action=logOUT">退出</a>
  23. </body>
  24. </html>

5. 作业部分

  • 销毁session的方法
  1. $_SESSION['username'] = 'Wang';
  2. $_SESSION['age'] = '28';
  3. echo '创建session后打印,结果为一个array:<br><br>';
  4. print_r($_SESSION);
  5. echo '<hr>';
  6. echo 'destroy的结果:<br><br>';
  7. session_destroy();
  8. print_r($_SESSION);
  9. echo '<hr>';
  10. echo '赋予控制array()后的结果:<br><br>';
  11. $_SESSION = array();
  12. print_r($_SESSION);
  13. echo '<hr>';
  14. echo 使用reset后的结果后的结果:<br><br>';
  15. $_SESSION['username'] = 'Gang';
  16. $_SESSION['age'] = '29';
  17. session_reset();
  18. print_r($_SESSION);
  19. // 好像reset没用,后面查询下用法。

具体如图:

  • 使用会话控制cookie技术实现用户7天自动登录(记住密码)
  • 现在是将password直接保存到了cookie中,后面就会发现这种方法是不对的。需要用md5等方法。不过确实实现了直接登陆过去的效果。具体见自己文件夹中的my2.php。
  1. function clearCookies(){
  2. setcookie("username"," ",time()-3600);
  3. setcookie("password"," ",time()-3600);
  4. setcookie("isLogin", " ", time()-3600);
  5. }
  6. if ($_GET['action'] == "login") {
  7. if ($username == "Peter" && $password == "123") {
  8. clearCookies();
  9. setcookie("username",$username, strtotime('+7 days'));
  10. setcookie("password",$password, strtotime('+7 days'));
  11. setcookie("isLogin","1", strtotime('+7 days'));
  12. header("Location:index.php");
  13. } else{
  14. exit("用户名或密码错误");
  15. }
  16. }
  17. if ($_COOKIE['username'] == "Peter" & $_COOKIE['password'] == "123" & $_COOKIE['isLogin'] == "1") {
  18. header("Location:index.php");
  19. } else{
  20. header("Location:login.php");
  21. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议