什么是会话控制
会话控制是一种面向连接的可靠通信方式,通常根据会话控制判断用户登录的行为。
会话控制的思想就是允许服务器跟踪同一个客户端做出的连续请求。
会话控制可以记录客户登录行为,所以不必每浏览一个页面都去重复登录。对于同一个用户的请求还可以在多个页面之间为其共享数据。
两种会话控制方式:cookie和session。
什么是cookie
cookie是一种有服务器发送给客户端的一段信息,储存在客户端浏览器的内存或硬盘上,在客户对该服务请求时发回它。如此不必在连接服务器时,再同过网络传输处理这些信息,进而提高网页处理效率,降低服务器负担。
PHP中基于cookie的用户登录案例
连接数据库文件conn.php,代码如下:
<?php
$mysqli = new mysqli("localhost", "root", "root", "demo");
?>
用户登录页面login.php,处理登录行为,如果登陆成功,则将登陆信息保存到cookie,代码如下:
<?php
if(isset($_POST['sub'])){ //判断是否登录
include "conn.php"; //连接数据库文件
$sql = "select id from user where username='{$_POST["username"]}' and password = '".md5($_POST['password'])."'"; //sql查询语句
$result = $mysqli->query($sql); //查询结果记录集
if($result->num_rows > 0){ //判断是否登录成功
$row = $result->fetch_assoc();
$time = time() + 60*60*24; //定义cookie保存时间
//保存登录信息到cookie
setcookie("username", $_POST['username'], $time);
setcookie("uid", $row["id"], $time);
setcookie("islogin", true, $time);
header("location:index.php"); //跳转到登陆成功界面
}
echo "用户名密码有误!";
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>登陆</title>
<link rel="stylesheet" href="">
</head>
<body>
<form action="" method="post">
<table align="center" border="1" width="300">
<caption><h1>用户登录</h1></caption>
<tr>
<th>用户名</th>
<td><input type="text" name="username" /></td>
</tr>
<tr>
<th>密码</th>
<td><input type="password" name="password" /></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="sub" value="登陆" />
</td>
</tr>
</table>
</form>
</body>
</html>
判断登录是否成功common.php,如果不成功,依然返回登陆界面,代码如下:
<?php
/**
* @Author: mrhengbing
* @Email: 415671062@qq.com
* @Create time: 2016-12-02 15:50:17
* @Last Modified by: mrhengbing
* @Last Modified time: 2016-12-02 15:51:07
*/
if(!$_COOKIE['islogin']){
header("location:login.php");
}
?>
登陆成功页面index.php,可以从cookie中读取登录信息,代码如下:
<?php
header("Content-type:text/html;charset=utf-8"); //设置页面内容是html,编码格式是utf-8
include "common.php"; //判断是否成功登录
include "conn.php"; //连接数据库
echo "用户<b>".$_COOKIE["username"]."</b>,你好!";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<link rel="stylesheet" href="">
</head>
<body>
<a href="logout.php">退出登录</a>
</body>
</html>
退出登录页面logout.php,该页面清除cookie信息,代码如下:
<?php
include "common.php";
$username = $_COOKIE["username"]; //提取cookie信息
//清除cookie信息
setcookie("username");
setcookie("uid", "", time()-3600);
setcookie("islogin");
echo $username." 再见!";
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title></title>
<link rel="stylesheet" href="">
</head>
<body>
<a href="login.php">重新登陆!</a>
</body>
</html>
ps:关于setcookie()的用法参考:PHP:setcookie