一;什么是SESSION;
将用户会话信息保存在服务器端使用session
1. session保存到服务器端,目录在php.ini文件中
2. session的创建,读取,删除都是用超全局变量$_SESSION
3. 使用session之前,必须用session_start()开启会话
4. 每个用户会被分配一个唯一的session_id,访问服务器会带上这个参数
5. php默认session是基于cookie的,所以session_id存在cookie中
6. session是一个32位的字符串,默认生存周期为1440秒,24分钟,这个数据可修改
session_status(); 未启用返回1,已启用返回2,可用它来检测session启用状态
session_name(); 查看session_id的名字:PHPSESSID
所以可以通过检查客户端是否存在PHPSESSID这个cookie变量来检测是否存在 session
SESSION的清除
清除全部session
unset($_SESSION);
用清除cookie的方法来清除
setcookie(session_name(), '',time()-10000);
用专用函数来清除
session_destroy();
二;以下的PHP文档中的代表是用来演示session的用法;验证用户登录信息;如果验证通过则表示登录成功将用户的信息写入session中保存;
<?php //导入头部 require 'header.php'; if($_SERVER['REQUEST_METHOD']=='POST'){ //验证用户名和密码 if(empty($_POST['name'])){ echo '<script>alert("用户名不能为空")</script>'; }else{ $name=htmlspecialchars(trim($_POST['name'])); } if(empty($_POST['password'])){ echo '<script>alert("密码不能为空")</script>'; }else{ $password=htmlspecialchars(trim($_POST['password'])); } if($name && $password){ //生成pdo对象连接数据库 try{ $pdo=new PDO('mysql:host=localhost;dbname=demo;charset=utf8','root','root'); //贮备好pdo 预处理的查询语句 $sql="SELECT `name`,`password` FROM `user1` WHERE `name`=:name AND `password`=sha1(:password)"; //生成pdo预处理对象使用的是pdo对象的prepare方法 $pdoStmt=$pdo->prepare($sql); //参数绑定使用的是pdoStament对象的bindParam()方法,第一个参数是占位符名称第二个参数一定要是一个变量 $pdoStmt->bindParam(':name',$name,PDO::PARAM_STR); $pdoStmt->bindParam(':password',$password,PDO::PARAM_STR); //执行;使用的是pdoStament中的execute()方法;成功返回true 失败返回false $res=$pdoStmt->execute(); if(true==$res){ if($pdoStmt->rowCount()==1){//如果查询用户表中的用户信息为一条则表示登录成功 //写入session; session_start();//开启session; $_SESSION['name']=$name; $_SESSION['password']=$password; //写入session之后登录成功用户跳转至admin.php页面; echo '<script>alert("登录成功");location.href="admin.php"</script>'; }else{ echo '<script>alert("用户名和密码不正确请从新输入")</script>'; } }else{ print_r($pdoStmt->errorInfo()); } }catch(PDOException $e){ $e->getMessage(); die(); } }else{ echo '<script>alert("没有输入用户名和密码,请检查")</script>'; } } //ppppppp\peizhibao\phpstudy\tmp\tmp session 路径 ?> <div class="container"> <div class="row"> <div class="col-md-12"> <h3 class="text-center">用户登录</h3> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" class="form-horizontal"> <div class="form-group"> <label for="name" class="col-sm-2 control-label">用户名:</label> <div class="col-sm-10"> <input type="text" class="form-control" id="name" placeholder="userName" name="name" value="<?php echo (isset($_POST['name']))?$_POST['name']:''?>"> </div> </div> <div class="form-group"> <label for="password" class="col-sm-2 control-label">密码:</label> <div class="col-sm-10"> <input type="password" class="form-control" id="password" placeholder="PassWord" name="password" value="<?php echo (isset($_POST['name']))?$_POST['name']:''?>"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10 text-center"> <button type="submit" class="btn btn-primary btn-block">注册</button> </div> </div> </form> </div> </div> </div>
三;下面是admin.php文档中的代码;如果用户登录成功并且用户名以及密码都写入了session 那么久显示admin.php中的信息,否则表示用户没有登录跳转至登录页面进行登录
<?php //导入头部 require 'header.php'; echo '<h2>欢迎来到PHP中文网管理后台</h2>'; session_start();//开启session if(isset($_SESSION['name'])){ echo '<p style="color:green">欢迎管理员<span style="color:red">'.$_SESSION['name'].' </span></p>'; }else{ echo '<script>alert("请先登录");location.href="login_session.php"</script>'; } //phpinfo(); ?>