cookie
cookie
:保存在客户端的缓存信息。session
:保存在服务端的缓存信息。
注意:
cookie并不安全,不要保存用户敏感信息,比如:密码、手机号等;
cookie中存储的信息有限,不要用来存放大数据。
- 使用
setcookie()
设置cookie
代码示例:将用户提交的表单数据设置到cookie中
<?php
// setcookie()设置cookie,第三个参数不存在则cookie由浏览器维护,浏览器关闭则消失
$username = $_POST['username'];
setcookie('username', $username, strtotime('+7 days'), '/', '127.0.0.1');
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>会话控制</title>
</head>
<body>
<form action="1.php" method="post">
<label for="username">用户名:</label>
<input type="text" id="username" name="username">
<label for="pwd">密码:</label>
<input type="password" id="pwd" name="pwd">
<button type="submit">登录</button>
</form>
</body>
</html>
运行结果:
setcookie()与setrawcookie()的区别
// 特殊符号自动编码
setcookie('username', 'admin!@');
// 特殊符号不会自动编码
setrawcookie('username', 'admin?@');
运行结果:
session
- session:用户打开浏览器到关闭浏览器期间的数据
- 开始一个会话,也可以在php.ini文件中设置session.auto_start = 1,自动开启session
- 开启session时,session_start()前不能有其他代码
- session文件存放位置设置:session.save_path=”D:\phpstudy_pro\Extensions\tmp\tmp”
代码示例:
<?php
// 开始会话
session_start();
// 创建session数据
$_SESSION['username'] = 'admin';
$_SESSION['uid'] = 123;
// 销毁session
// 1.删除单个会话,使用unset()删除会话时,如果不指定元素unset($_SESSION)会删除整个session并且不能再创建
// unset($_SESSION['username']);
// 2.删除多个会话变量,并不会删除服务器session文件
// $_SESSION = array();
// PHP >= 5.4支持
// $_SESSION = [];
// 3.结束所有会话,执行成功返回true,不会删除保存在客户端 Cookie 中的 Session ID
// 会删除服务器session文件
// session_destroy();
// 4.要删除cookie中的session ID就要用setcookie()
// 先获取session的名称
$sessionname = session_name();
// 删除操作
setcookie($sessionname, '', time() - 3600, '/');
cookie本地文件实现用户登录信息保存7天:
index.php(首页)示例:
<?php
if (!(isset($_COOKIE['isLogin']) && $_COOKIE['isLogin'] == '1')) {
exit('
<script>
alert(\'未登录用户\');
location.href=\'login.php\';
</script>
');
}
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
</head>
<body>
<h1>首页</h1>
<?php
echo "<p style=\"color:red;\">" . $_COOKIE['username'] . "已登录</p>";
?>
<a href="login.php?action=logout">退出</a>
</body>
</html>
login.php(登录页)示例:
<?php
// 接收提交的数据
$username = $_POST['username'];
$password = $_POST['pwd'];
// 清除cookie
function clearCache()
{
setcookie('username', '', time() - 3600);
setcookie('login', '', time() - 3600);
}
// 判断提交数据来源,将合法数据存入cookie7天,并执行跳转
if ($_GET['action'] == 'login') {
if ($username == 'admin' && $password == 'abc') {
clearCache();
setcookie('username', $username, strtotime('+7 days'), '/', '127.0.0.1');
setcookie('isLogin', '1', strtotime('+7 days'), '/', '127.0.0.1');
header('Location:index.php');
} else {
exit('未登录');
}
}
// 退出登录清除cookie
if ($_GET['action'] == 'logout') {
clearCache();
}
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>会话控制</title>
</head>
<body>
<form action="login.php?action=login" method="post">
<p style="color:blueviolet;">用户登录</p>
<label for="username">用户名:</label>
<input type="text" id="username" name="username">
<label for="pwd">密码:</label>
<input type="password" id="pwd" name="pwd">
<button type="submit" name="login">登录</button>
</form>
</body>
</html>
运行效果:
这时直接进入首页index.php可以看到是已登录状态:
总结
熟悉cookie的两种存储方式的创建方法;
掌握销毁session时不同效果;
用户提交的数据要做验证;