Correcting teacher:PHPz
Correction status:qualified
Teacher's comments:
//COOKIE 存在浏览器中 存在用户电脑中的 储存大小限制
//setcookie(name, value, expire, path, domain, secure);
/* name -- cookie的名字
* value -- cookie的值,存放在客户端,不要存放敏感数据
* expire -- Cookie 过期的时间。这是个 Unix 时间戳,即从 Unix 纪元开始的秒数。
* path -- Cookie 在服务器端的有效路径。
* domain -- 该 cookie 有效的域名。
* secure -- 指明 cookie 是否仅通过安全的 HTTPS 连接传送。
* 当设成 TRUE 时,cookie 仅在安全的连接中被设置。默认值为FALSE。
*/
//创建cookie
setcookie('name','ouyangke', time()+3600);//第一次存无法获取数据
// 储存数组
setcookie('php[id]',10);
setcookie('php[name]','ouyangke');
//Array ( [php] => Array ( [id] => 10 [name] => ouyangke )
//删除
setcookie('name','ouyangke', time()-3600);
//数组只能删除值
setcookie(‘php[id]’,’ouyangke’, time()-3600);
//SESSION 存在服务器上的 是基于COOKIE储存大小无限制
//在您把用户信息存储到 PHP session 中之前,首先必须启动会话。
//session_start() 函数必须位于 <html> 标签之前
//启动会话
session_start();
//存储 Session 变量
$_SESSION['views']=1;
$_SESSION['name']='Joy';
//Array ( [views] => 1 [name] => Joy )
//销毁 Session
//如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。
unset($_SESSION['views']);//unset() 函数用于释放指定的 session 变量
session_unset(); //先清空了变量的值 释放内存中的变量 session 被注销了
//通过调用 session_destroy() 函数彻底销毁 session
session_destroy(); //先注销了 再删除但是内存中变量和值是存在的
// 常用函数
//1.session_start — 启动新会话或者重用现有会话
//2.session_status() —用于返回当前会话状态。
//返回值
//PHP_SESSION_DISABLED 会话是被禁用的。
//PHP_SESSION_NONE 会话是启用的,但不存在当前会话。
//PHP_SESSION_ACTIVE 会话是启用的,而且存在当前会话。
//
//3.session_abort()----放弃会话数组更改并完成会话
//4.session_id ()—获取会话id
//5.session_name ();返回当前会话名称。如果指定 name 参数,那么此函数会更新会话名称,并且 返回 原来的 会话名称
//6.session_unset ();无参数释放当前会话注册的所有会话变量
// 其他函数
//session_cache_expire — 返回当前缓存的到期时间
//session_cache_limiter — 读取/设置缓存限制器
//session_commit — session_write_close 的别名
//session_create_id — Create new session id
//session_decode — 解码会话数据
//session_destroy — 销毁一个会话中的全部数据
//session_encode — 将当前会话数据编码为一个字符串
//session_gc — Perform session data garbage collection
//session_get_cookie_params — 获取会话 cookie 参数
//session_module_name — 获取/设置会话模块名称
//session_regenerate_id — 使用新生成的会话 ID 更新现有会话 ID
//session_register_shutdown — 关闭会话
//session_reset — Re-initialize session array with original values
//session_save_path — 读取/设置当前会话的保存路径
//session_set_cookie_params — 设置会话 cookie 参数
//session_set_save_handler — 设置用户自定义会话存储函数
//session_write_close — Write session data and end session
//判断是否登录
if(empty($_COOKIE['id'])){
echo '<script>window.location.href="login.php";</script>';
exit;
}
//登录页面
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>用户登录</title>
<link rel="stylesheet" href="list.css">
</head>
<body>
<h2>用户登录</h2>
<form action="" method="post" >
<!-- <form action="" method="post" onsubmit="return false">-->
<div class="adds">
<div class="tli" id="tips" style="color: red"> </div>
<div class="tli">
<label for="name">账号:</label>
<input type="text" id="name" name="name" placeholder="请输入用户名" required autofocus value=""/>
</div>
<div class="tli">
<label for="name">密码:</label>
<input type="password" id="pass" name="pass" placeholder="请输入密码" required value=""/>
</div>
<div class="tli">
<button type ="button" onclick="check(this.form)">登录</button>
</div>
</div>
</form>
</body>
</html>
<script>
function check(ele){
//1、获取表单上的账号和密码
let acc= ele.name.value.trim();
let pass= ele.pass.value.trim();
if(acc.length === 0|| pass.lenth === 0){
document.getElementById('tips').innerHTML = "请输入账号和密码";
return false;
}
//2、把账号密码加密成json数据
let user =JSON.stringify({name:acc,pass:pass});
//3、把数据提交到接口中
fetch('check.php',{method:'post',body : user})
.then(response=>response.json())
.then(json=>{
if(json.status != 0){
document.getElementById('tips').innerHTML = json.msg;
return false;
}
document.getElementById('tips').innerHTML = "登录成功,等待跳转";
setTimeout($=>(window.location.href="list.php"),1000)
})
}
</script>
//验证页面
<?php
header('Content-Type:application/json');
require_once 'fun.php';
$data = trim(file_get_contents('php://input'));
//print_r($data);
$user= json_decode($data,true);
$find= find('user','*','name="'.$user['name'].'"');
if(empty($find)){
echo json_encode(['status'=>1,'msg'=>'账号错误']);
exit;
}
//print_r($find['id']);
//if($find['name']!= $user['name']){
// echo json_encode(['status'=>1,'msg'=>'账号错误']);
//}
elseif($find['pass']!= md5($user['pass'])){
echo json_encode(['status'=>1,'msg'=>'密码错误']);
exit;
}
else{
echo json_encode(['status'=>0,'msg'=>'登录成功']);
setcookie('id',$find['id']);
setcookie('name',$find['name']);
}
?>
//退出页面
<?php
if(empty($_COOKIE['id'])){
echo '<script>window.location.href="login.php";</script>';
exit;
}else{
setcookie('id',$_COOKIE['id'],time()-3600);
setcookie('name',$_COOKIE['name'],time()-3600);
echo '<script>window.location.href="login.php";</script>';
}
session_start();// 开启会话
//判断是否登录
if(empty($_SESSION['id'])){
echo '<script>window.location.href="login.php";</script>';
exit;
}
//登录页面
<?php
session_start();// 开启会话
if(!empty($_SESSION['id'])){
echo '<script>window.location.href="list.php";</script>';
exit;
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>用户登录</title>
<link rel="stylesheet" href="list.css">
</head>
<body>
<h2>用户登录</h2>
<form action="" method="post" >
<!-- <form action="" method="post" onsubmit="return false">-->
<div class="adds">
<div class="tli" id="tips" style="color: red"> </div>
<div class="tli">
<label for="name">账号:</label>
<input type="text" id="name" name="name" placeholder="请输入用户名" required autofocus value=""/>
</div>
<div class="tli">
<label for="name">密码:</label>
<input type="password" id="pass" name="pass" placeholder="请输入密码" required value=""/>
</div>
<div class="tli">
<button type ="button" onclick="check(this.form)">登录</button>
</div>
</div>
</form>
</body>
</html>
<script>
function check(ele){
//1、获取表单上的账号和密码
let acc= ele.name.value.trim();
let pass= ele.pass.value.trim();
if(acc.length === 0|| pass.lenth === 0){
document.getElementById('tips').innerHTML = "请输入账号和密码";
return false;
}
//2、把账号密码加密成json数据
let user =JSON.stringify({name:acc,pass:pass});
//3、把数据提交到接口中
fetch('check.php',{method:'post',body : user})
.then(response=>response.json())
.then(json=>{
if(json.status != 0){
document.getElementById('tips').innerHTML = json.msg;
return false;
}
document.getElementById('tips').innerHTML = "登录成功,等待跳转";
setTimeout($=>(window.location.href="list.php"),1000)
})
}
</script>
//验证页面
<?php
header('Content-Type:application/json');
session_start();// 开启会话
require_once 'fun.php';
$data = trim(file_get_contents('php://input'));
//print_r($data);
$user= json_decode($data,true);
$find= find('user','*','name="'.$user['name'].'"');
if(empty($find)){
echo json_encode(['status'=>1,'msg'=>'账号错误']);
exit;
}
//print_r($find['id']);
//if($find['name']!= $user['name']){
// echo json_encode(['status'=>1,'msg'=>'账号错误']);
//}
elseif($find['pass']!= md5($user['pass'])){
echo json_encode(['status'=>1,'msg'=>'密码错误']);
exit;
}
else{
echo json_encode(['status'=>0,'msg'=>'登录成功']);
// setcookie('id',$find['id']);
$_SESSION['id']=$find['id'];
// setcookie('name',$find['name']);
$_SESSION['name']=$find['name'];
}
?>
//注销登录
<?php
session_start();// 开启会话
//判断session
if(empty($_SESSION['id'])){
echo '<script>window.location.href="login.php";</script>';
exit;
}else{
session_unset();
echo '<script>window.location.href="login.php";</script>';
}
//命名空间 namespace
namespace one;
function php(){
return '我是one 空间的php函数';
}
namespace two;
function php(){
return '我是two 空间的php函数';
}
echo \one\php(); //我是one 空间的php函数
echo '<hr />';
echo php(); //我是two 空间的php函数
echo '<hr />';
// 变量,类,函数,命名空间 四大类
namespace {
$name = '小明';
//跟空间命名
function php(){
return '我是根空间的php函数';
}
class Title
{
}
}
namespace one{
$name = '小花';
function php(){
return '我是one空间的php函数';
}
class Title
{
}
}
namespace two{
$name = '小花';
function php(){
return '我是two空间的php函数';
}
class Title
{
}
echo '<hr />';
echo \one\php();
echo '<hr />';
echo \php();
//必须在{}内访问
}
//echo \one\php(); 无法在{}外访问
//一个文件,一个类,一个命名空间
//命名空间namespace 放在代码第一行,但可以放在严谨函数下一行
namespace one;
$name = '小明';
//跟空间命名
function php(){
return '我是根空间的php函数';
}
class Title
{
}
declare (strict_types = 1); //严谨模式
namespace one{
$name = '小明';
//跟空间命名
function php(){
return '我是根空间的php函数';
}
class Title
{
}
}
namespace one\php{
}
namespace one\php\not{
}