博客列表 >PHP会话控制

PHP会话控制

王佳祥
王佳祥原创
2020年07月15日 15:20:01637浏览

PHP会话控制

一、对会话控制的认识

  • 会话控制的思想是指能够在网站上根据一个会话来跟踪用户,通过会话控制,可以很容易的做到对用户登录的支持并根据其授权级别和个人爱好显示相应的内容,可以根据会话控制记录用户的行为,还可以实现购物车。
  • setcookie('name','value','expire','path','domain','secure','httponly');
参数 描述
name 规定 cookie 的名称
value 规定 cookie 的值
expire 规定 cookie 的过期时间,time()+3600 * 24 * 30 将设置 cookie 的过期时间为 30 天。如果这个参数没有设置,那么 cookie 将在 session 结束后(即浏览器关闭时)自动失效
path 规定 cookie 的服务器路径,如果路径设置为 “/“,那么 cookie 将在整个域名内有效
domain 规定 cookie 的域名,为了让 cookie 在所有子域名中有效,您需要把 cookie 的域名前加上 “.”
secure 规定是否需要在安全的 HTTPS 连接来传输 cookie。如果 cookie 需要在安全的 HTTPS 连接下传输,则设置为 TRUE,默认是 FALSE
httponly 只可以通过http协议来访问
  1. <?php
  2. //1.通过setcookie(),来设置cookie
  3. setcookie('name','admin',time()+600,'/','.php.edu',0);


  • header()方法发送原生http头来设置cookie
  1. <?php
  2. header("Set-Cookie:n=1");


  • setrawcookie()发送未经 URL 编码的 cookie
  1. <?php
  2. setcookie('email','7777@qq.com');
  3. setrawcookie('email','8888@163.com');


  1. <?php
  2. setcookie('name','admin',time()+600,'/','.php.edu',0);
  3. echo $_COOKIE['name'];


  1. <?php
  2. setcookie('name','admin',time()+600,'/','.php.edu',0);
  3. setcookie('name','zhang');
  4. echo $_COOKIE['name'];


  1. <?php
  2. //删除cookie,把第三个参数设置为过去的时间,值设置为空
  3. setcookie('name','admin',time()+600,'/','.php.edu',0);
  4. setcookie('name','',time()-3600,'/','.php.edu',0);
  5. print_f($_COOKIE);
  • 如果cookie设置了根目录和域名,删除的时候也要加上根目录和域名


5.localStorage 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除

  1. localStorage.setItem('name','wang');
  2. /*添加数据*/
  3. localStorage.getItem('name');
  4. /*读取数据*/
  5. /*删除一条数据*/
  6. localStorage.removeItem('name');
  7. /*批量删除数据*/
  8. localStorage.clear();


三、session会话控制

1. 对session的认识

  • session把用户的会话信息保存到服务器上

  • session的工作原理:

    1. 用户向服务器发送请求,服务器会检测请求里有没有一个session ID,没有的话,服务器会创建一个session文件并生成一个session ID,然后把session ID返回给客户端;如果请求中有session ID的话,服务器就会把之前的会话信息读取出来并且这个会话信息在服务器的任何一个页面都是共享的。

2.session_start():启动会话

  1. <?php
  2. session_start();
  3. //session_start() 函数必须位于 <html> 标签之前
  4. //存储 Session 变量
  5. $_SESSION['name'] = 'admin001';
  6. //输出session变量
  7. echo 'session的值是:'.$_SESSION['name'];
  8. //销毁session
  9. //session_destroy();
  10. session_unset();
  11. //释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id
  12. session_destroy();
  13. //删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留
  14. print_r($_SESSION);
  15. ?>




四、实战练习

  1. //demo3.php代码
  2. <?php
  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 ($_POST['sub']){
  12. if($username == 'admin' && $password == '123456'){
  13. clearCookies();
  14. setcookie('username',$username);
  15. setcookie('isLogin','1');
  16. print_r($_COOKIE);
  17. header("Location:demo4.php");
  18. }else{
  19. exit('<script>
  20. alert("用户名或密码错误");
  21. </script>');
  22. }
  23. }
  24. //退出登录
  25. if($_GET['action'] == 'logOut'){
  26. clearCookies();
  27. }
  28. ?>
  29. <!DOCTYPE html>
  30. <html lang="en">
  31. <head>
  32. <meta charset="UTF-8">
  33. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  34. <title>实战练习</title>
  35. <style>
  36. body{
  37. margin:0;
  38. padding: 0;
  39. box-sizing: border-box;
  40. background-color: gainsboro;
  41. display:flex;
  42. justify-content: center;
  43. align-items: center;
  44. }
  45. .content{
  46. width: 500px;
  47. height: 300px;
  48. border-radius: 10px;
  49. box-shadow: 0 0 5px #888;
  50. background-color: #fff;
  51. position:absolute;
  52. top:30%;
  53. padding:10px;
  54. }
  55. </style>
  56. </head>
  57. <body>
  58. <table class="content">
  59. <form action="" method="post">
  60. <tr>
  61. <td><label for="username">账号:</label></td>
  62. <td><input type="text" name="username" id="username"></td>
  63. </tr>
  64. <tr>
  65. <td><label for="password">密码:</label></td>
  66. <td><input type="password" name="password" id="password"></td>
  67. </tr>
  68. <tr>
  69. <td colspan="2"><input type="submit" name="sub" value="提交"></td>
  70. </tr>
  71. </form>
  72. </table>
  73. </body>
  74. </html>

  1. //demo4.php代码
  2. <?php
  3. if(!isset($_COOKIE['isLogin']) || $_COOKIE['isLogin'] != "1"){
  4. exit('<script>
  5. alert("请先登录");
  6. location.href = "demo3.php";
  7. </script>');
  8. }
  9. echo '<h1>欢迎登录</h1>'.$_COOKIE['username'].'<a href="demo3.php?action=logOut">退出</a>';






五、学习总结

  • 设置setcookie(),header(‘Set-Cookie:a=1’),setrawcookie()

  • 查看cookie用$_COOKIE

  • 更新直接覆盖setcookie()

  • 删除cookie,设置时间为负数,setcookie(‘参数’,’null’,time()-3600);

  • 如果设置了根目录,域名;删除时必须写上根目录和域名

2.session(保存在服务器端)

  • 设置php.ini,session.auto_start = 0;启动会话时需要写session_start();

  • session变量赋值:$_SESSION[‘name’] = ‘admin’;

  • 删除session:

  1. session_unset();
  2. 释放当前在内存中已经创建的所有$_SESSION变量,但不删除session文件以及不释放对应的session id
  3. session_destroy();
  4. 删除当前用户对应的session文件以及释放session id,内存中的$_SESSION变量内容依然保留
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议