理解会话控制的概念:
阅读过HTTP协议相关资料的同学都会知道HTTP协议是WEB服务器与客户端(浏览器)相互通信的协议,它是一种无状态协议,所谓无状态,指的是不会维护http请求数据,http请求是独立的,不持久的。也就是说HTTP协议没有一个内建的机制来维护两个事务之间的状态或者说是关系吧。当一个用户在请求一个页面后再去请求另外一个页面时,HTTP将无法告诉我们这两个请求是否来自同一个用户。
由此我们就会觉得很奇怪了,平时我们在论坛逛帖子或电商网站购物时,只要我们在这个站点内,不论我们怎么跳转,从一个页面跑到另一个页面,网站总会记得我是谁,比如告诉你购买车里选了哪几样东西。这就是运用了HTTP会话控制。在网站中跟踪一个变量,通过对变量的跟踪,使多个请求事物之间建立联系,根据授权和用户身份显示不同的内容、不同页面。看登入者是谁,给他不一样的内容
会话控制的两个计数:
session
1.保存在服务器且每个人一份
2.可以存储任何类型的数据
3.有一个默认的过期时间
优点:安全
缺点:容易造成服务器压力过大
cookie
1.保存在客户端
2.只能存储字符串
3.不会过期
优点:不会对服务器造成很大的压力
缺点:安全没有session好;
session用法
首先创建一个存储页面(赋值):
session_start(); //注意:在所有使用session页面最顶端要开启session--"session_start()";前面不许放东西 $_SESSION["name"]="张三";//存储; //echo $_SESSION["name"];
开启(取值):
session_start();//开启session echo $_SESSION["name"];
只要不关掉游览器他就一直存在
cookie用法:
首先创建一个存储页面(赋值):
session_start(); //注意:在所有使用session页面最顶端要开启session--"session_start()";前面不许放东西 $_COOKIE["name"]="张三";//存储; setcookie("shao","5") //setcookie(设置cookie),第一个参数是你要存储的名字,第二个是你要往里面存的值 ?>
开启(取值):
<?php session_start();//开启session echo $_COOKIE["shao"];
cookie不要要开启cookie
session每个页面都需要开启
以上就是两种方法的用法
例子:
先来一个登入页面:
<body> <form action="chuli.php" method="post"> <div>帐号:<input type="text" name="zhang"/></div> <div>密码:<input type="text" name="mi"/></div> <input type="submit" value="登入"/> </form> </body>
登入处理:
<?php session_start(); //开启session include ("db.class.php"); //引用封装类 $db = new db(); $zhang = $_POST["zhang"]; $mi = $_POST["mi"]; $sql = "select mi from mydb WHERE zhang='{$zhang}'"; $arr = $db->Query($sql); if($arr[0][0]==$mi && !empty($mi)) //如果用户传的密码一致,且不为空 { //即将跳转页面之前,把帐号存到session里面 $_SESSION["zhang"] = $zhang; header("location:main.php"); } else { echo "输入错误"; }
我们要求通过登入页面,进入主页面;
如果直接访问主页面地址也可以进入程序,这样是不合理的;
我们需要控制用户必须通过登入,才能访问,不登入不能访问并传送到登入页面
在主页面:
<body> <?php //登入一定要取用户名!取用户名 session_start(); //echo $_SESSION["zhang"]; //试一下:已取到帐号,知道是这个帐号登入了 //根据session if(empty($_SESSION["zhang"])) { header("location:dengru.php"); //如果为空 跳转到登入页面 exit; //中断 } ?> </body>
这样的话 我输入网址:
不可以强登!这种方式是经常使用的,也是必须要使用的
注销登入:
1.清除session;
2.跳转到登入页面
注销SESSION时不能用unset($_SESSION),可以使用$_SESSION = array()或则$_SESSION = null,正确注销session的方法如下:
//正确的注销session方法: //1开启session session_start(); //2、清空session信息 $_SESSION = array(); //3、清楚客户端sessionid if(isset($_COOKIE[session_name()])) { setCookie(session_name(),'',time()-3600,'/'); } //4、彻底销毁session session_destroy();
.