博客列表 >PHP Cookie与Session

PHP Cookie与Session

longlong
longlong原创
2020年07月15日 13:23:42919浏览

cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

创建cookie可以使用setcookie()函数或者header()函数,函数需要在<html>标签之前。

  • setcookie():其语法是:setcookie(name, value, expire, path, domain),其中name和value是必选,其他参数根据情况可选
  1. <?php
  2. // 示例:设置一个cookie,1小时后过期
  3. setcookie("user","Alice",time()+60*60);
  4. print_r($_COOKIE);

  • header()
  1. <?php
  2. // 示例:设置一个cookie
  3. header('Set-cookie:username = Jack');
  4. print_r($_COOKIE);

  1. <?php
  2. // 方式一:查看单个
  3. echo $_COOKIE['user'],'<br>';
  4. // 方式二:查看所有
  5. print_r($_COOKIE);

  1. <?php
  2. // 将cookie的过期时间设置为过去
  3. setcookie("user","Alice",time()-3600);
  4. print_r($_COOKIE);

  1. <?php
  2. // 更新cookie
  3. setcookie("username","Lisa");
  4. // 设置cookie后第一次刷新浏览器,cookie在response headers这里,这表示服务器告知浏览器有一个cookie需要你来保存一下
  5. // 第二次刷新后,cookie就会存在于request headers这里了
  6. // 更新cookie时,参数要一一对应
  7. setcookie("username","Lisa666");

  1. <?php
  2. // setrawcookie():防止存放cookie时,浏览器对它进行URL编码
  3. // 先设置好两个示例cookie,开发工具中查看
  4. setcookie("user","小明");
  5. setcookie("email","666666@qq.com");
  6. // 然后使用setrawcookie()对cookie值更新
  7. setrawcookie("user","小王");
  8. setrawcookie("email","888888@qq.com");

2. session

2.1 session是什么

PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

2.2 session的工作原理

Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

2.3 开启会话

在把用户信息存储到 PHP session 中之前,必须先启动会话,必须位于<html>标签之前。

先找到php.ini,设置 session.auto_start = 0

然后,开启会话:

  1. <?php
  2. // 开启会话
  3. session_start();

2.4 设置session

  1. <?php
  2. // 开启会话
  3. session_start();
  4. // 设置session
  5. $_SESSION["user"] = "Alice";
  6. $_SESSION["email"] = "123456@qq.com";

2.5 取回session

  1. <?php
  2. // 开启会话
  3. session_start();
  4. // 设置session
  5. // $_SESSION["user"] = "Alice";
  6. // $_SESSION["email"] = "123456@qq.com";
  7. // 取回session
  8. echo $_SESSION['user'],'<br>';
  9. echo $_SESSION['email'];

2.6 销毁session

  1. <?php
  2. // 开启会话
  3. session_start();
  4. // 设置session
  5. // $_SESSION["user"] = "Alice";
  6. // $_SESSION["email"] = "123456@qq.com";
  7. // 取回session
  8. // echo $_SESSION['user'],'<br>';
  9. // echo $_SESSION['email'];
  10. // 销毁session
  11. // 方式一:销毁单个
  12. // unset($_SESSION['user']);
  13. // echo $_SESSION['user'],'<br>';
  14. // echo $_SESSION['email'];
  15. // 方式二:销毁所有
  16. session_destroy();
  17. echo $_SESSION['user'],'<br>';
  18. echo $_SESSION['email'];

3. 小案例

  • 登录页面
  1. <!-- 第二步:获取表单中的用户名和密码 -->
  2. <?php
  3. // 表单提交后拿到提交过来的值
  4. $posts = $_POST;
  5. // 清除两侧空白字符
  6. foreach ( $posts as $key => $value ) {
  7. $posts[$key] = trim($value);
  8. }
  9. // 接收数据(用户名和密码)
  10. $username = $posts['username'];
  11. $password = $posts['password'];
  12. // 自定义一个函数,用于清除页面的cookie信息,
  13. function cleCookie () {
  14. setcookie("username"," ",time()-3600);
  15. setcookie("password"," ",time()-3600);
  16. setcookie("isLogin"," ",time()-3600);
  17. }
  18. // 判断用户是否点击了登录按钮
  19. if ($posts['submit']) { // 如果submit存在,表示点击了登录
  20. if ( $username == 'longlong' and $password == '123456' ) {
  21. cleCookie();
  22. setcookie("username",$username,time()+7*24*60*60);
  23. setcookie("password",$password,time()+7*24*60*60);
  24. setcookie("isLogin","1",time()+7*24*60*60);
  25. // 将正确的cookie储存好以后跳转到主页
  26. header("Location:4.index.php");
  27. } else {
  28. exit('用户名或密码有误,请重新登录');
  29. }
  30. }
  31. // 当退出账户时
  32. if ($_GET['action' == 'out']) {
  33. cleCookie();
  34. }
  35. ?>
  36. <!-- 第一步,写好登录页面 -->
  37. <!DOCTYPE html>
  38. <html lang="en">
  39. <head>
  40. <meta charset="UTF-8">
  41. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  42. <title>用户登录</title>
  43. </head>
  44. <body>
  45. <h2 style="text-align: center;">用户登录</h2>
  46. <!-- action为空,表示提交到当前页面 -->
  47. <form action="" method="POST" style="text-align: center;">
  48. <div>
  49. <label for="username">用户名:</label>
  50. <input type="text" name="username" id="username">
  51. </div>
  52. <div>
  53. <label for="password">密&nbsp;码:</label>
  54. <input type="password" name="password" id="password">
  55. </div>
  56. <div style="margin-top: 5px;">
  57. <input type="submit" name="submit" value="登录" style="width: 80px;">
  58. </div>
  59. </form>
  60. </body>
  61. </html>

  • 商城主页
  1. <!-- 检查用户是否登录成功 -->
  2. <?php
  3. if (!isset($_COOKIE['isLogin']) or $_COOKIE['isLogin'] != "1") {
  4. exit('<script>
  5. alert("请您先登录再访问");
  6. location.href="3.login.php";
  7. </script>');
  8. }
  9. ?>
  10. <!DOCTYPE html>
  11. <html lang="en">
  12. <head>
  13. <meta charset="UTF-8">
  14. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  15. <title>龙大商城</title>
  16. </head>
  17. <body>
  18. <h2>龙大商城主页</h2>
  19. <?php echo '欢迎' . $_COOKIE['username'] . '的到来!' ?>
  20. <a href="3.login.php?action=out" style="text-decoration: none;color: white;background: gray;">退出账户</a>
  21. </body>
  22. </html>

  • 点击退出账户后:

  • 重新启动浏览器时

  • 查看一下cookie

4. 总结

这次作业,感觉懵懵懂懂的写完了,貌似效果也出来了,但是全程都是用的cookie在操作,清除cookie,重新设置cookie,设置cookie过期时间,也不知道到底是我设置的cookie起了作用,还是浏览器在帮我自动保存,有点懵,只不过现在去登录,已经自动保存了用户名和密码。另外session没有用到,我在想是不是应该定义一个session变量,来控制cookie是否储存,后面我再敲敲代码试试。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议