Blogger Information
Blog 60
fans 5
comment 3
visits 65310
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP Cookie与Session
longlong
Original
914 people have browsed it

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是否储存,后面我再敲敲代码试试。

Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:session_id是服务端生成的,不是客户端!一定要多加练习~!
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post