网站建设组织,discuz 网站搬家,网站 用cms 侵权,网站搭建合同模板1、会话的基本知识 
# 会话## 1.会话是什么#xff1f;客户端与服务器之间的对话交流## 2.为什么需要会话#xff1f;-http 协议是无状态的#xff08;六亲不认#xff09;-同一用户多次访问同一网站#xff0c;对网站来说#xff0c;每次都是全新的-网站不能识别用户身份…1、会话的基本知识 
# 会话## 1.会话是什么客户端与服务器之间的对话交流## 2.为什么需要会话-http 协议是无状态的六亲不认-同一用户多次访问同一网站对网站来说每次都是全新的-网站不能识别用户身份不能为用户提供个性化服务
-用户需要被关怀被尊重-相同的操作不应该换个页面就重复进行例如登录、注册-用户信息应该在多个页面间共享例如购物车## 3.会话的基本步骤 和人与人之间的交流几乎一样1.开启会话初次见面相互介绍递个名片请多关照
2.访问网站再次见面报上姓名原来是你欢迎光临
3.数据交换对话交流及时反馈谈话内容立刻存档
4.销毁对话相谈甚欢恋恋不舍谈判破裂关门送客## 4.会话存储位置1.客户端cookie
2.服务端session## 5.PHP对应的操作变量
1.$_COOKIE
2.$_SESSION2、客户端会话 
?php
namespace _0822;//客户端会话存储(cookie)//1.设置(正常情况下,会把中文的值变为Unicode编码,如果想显示中文,就用setrawcookie)
//raw是原始的意思// setcookie(site,php中文网);
setrawcookie(site,php中文网);//2.查看($_COOKIE是一个超全局变量,无作用域,任何地方都能用)
echo $_COOKIE[site] ?? 未定义site. hr;//3.设置多个(建议使用数组语法)
setcookie(user[name],admin);
setcookie(user[email],adminqq.com);
setcookie(user[age],40);if(isset($_COOKIE[user])){foreach($_COOKIE[user] as $key  $value){printf([%s]  %sbr,$key,$value);}
}else{echo 未定义user;
}//4.删除(setcookie的第三个参数是过期时间)
//给一个已过期的时间就可以了
setcookie(welcome,hello world,time()-3600);/*** 将过多信息存储在客户端,并不合适* 1.数量受限:30个* 2.空间受限:4k* 3.安全隐患:天生不可避免* * 所以,会话信息推荐存储在服务器端* 客户端只需要保存一个会话id,用于标识访问身份即可*/3、服务端会话  
?phpnamespace _0822;//服务器端会话(session)//1.启动会话
session_start();/*** 启动会话做了二件事* 1.浏览器:创建会话IDPHPSESSID一串md5加密的字符串* 2.服务器:创建与浏览器会话ID对应的会话文件一个会话文件对应一个用户*///1.设置
$_SESSION[email]  adminphp.cn;
//sha1是40位字符串md5是32位
$_SESSION[password]  sha1(md5(123456) . phpcn123);//session
//email|s:12:adminphp.cn;password|s:40:8dc7df199a6642d631c11de069b2357e4b470cd0;
//!email指变量名,s指字符串,12指它值的长度(adminphp.cn的长度)
//把用户的session信息进行了序列化,序列化就是把这些变量,数组,或对象转换为字符串形式,这样的话就方便存储到数据库中,继而便于通过网络进行传输,或者各个语言间的数据交换//2.更新
$_SESSION[email]  peterphp.cn;//3.删除
// unset($_SESSION[email]);
// unset($_SESSION[password]);//一个一个删除太low了,更优雅地删除(一次性删除全部的session信息)
session_unset();//更狠地删除(直接把服务器的会话文件都删除了)
session_destroy(); 比如说登录时就带上登录信息跳转到handler.php这个页面进行登录处理到这个数据表中进行验证,看看有没有这个用户,如果注册,就把用户插入到表中,退出就直接销毁会话就可以了.  4、登录页面(login.php) 
!DOCTYPE html
html langenheadmeta charsetUTF-8title用户登录/titlelink relstylesheet typetext/css hrefcss/style.css
/headbodyh3用户登录/h3form actionhandle.php?actionlogin methodpostdivlabel foremail邮箱:/labelinput typeemail nameemail idemail placeholderdemoemail.com required autofocus/divdivlabel forpassword密码:/labelinput typepassword namepassword idpassword placeholder不少于6位 required/divdivbutton提交/button/div/forma hrefregister.php还没有帐号, 注册一个吧/a
/body/html5、入口文件(index.php) 
?php
namespace _0822;
session_start();
//判断是否已经登录?
if(isset($_SESSION[user])){$user  unserialize($_SESSION[user]);
}
// print_r($user);
?
!DOCTYPE html
html langen
headmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title首页/入口文件/titlelink relstylesheet hrefcss/index.css
/head
bodynava hrefindex.php我的博客/a?php if(isset($user)) :?span stylemargin-left: 300px;?$user[name]?/spana idlogout退出/a?php else:?a hreflogin.php登录/a?php endif?/navscriptdocument.querySelector(#logout).addEventListener(click,function(event){if(confirm(是否退出)){//禁用默认行为,其实就是禁用原a标签的点击跳转行为,使用事件中的自定义方法去处理event.preventDefault();//跳转到退出事件处理器window.location.assign(handle.php?actionlogout);}})/script
/body
/html 
6、 注册页面(register.php) 
!DOCTYPE html
html langenheadmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0link relstylesheet typetext/css hrefcss/style.csstitle注册用户/title
/headbodyh3用户注册/h3form actionhandle.php?actionregister methodpost onsubmitreturn compare()divlabel forname呢称:/labelinput typetext namename idname placeholder不少于3个字符 required autofocus/divdivlabel foremail邮箱:/labelinput typeemail nameemail idemail placeholderdemoemail.com required/divdivlabel forp1密码:/labelinput typepassword namep1 idp1 placeholder不少于6位 required/divdivlabel forp2重复:/labelinput typepassword namep2 idp2 placeholder必须与上面一致 required/divdivbutton提交/buttonspan idtips stylecolor: red/span/div/forma hreflogin.php我有帐号,直接登录/ascript// 验证二次密码是否相等?function compare() {if (document.forms[0].p1.value.trim() ! document.forms[0].p2.value.trim()) {document.querySelector(#tips).innerText  二次密码不相等;return false;}}/script
/body/html7、处理器文件(handle.php) 
?phpnamespace _0822;use PDO;//开启会话:必须写在第一行session_start();//sql//查询用户表中的数据use表
$db  new PDO(mysql:dbnamephpedu, root, root);
$stmt  $db-prepare(SELECT * FROM user);
if($stmt-execute()){$users  $stmt-fetchAll(PDO::FETCH_ASSOC);
}else{print_r($stmt-errorInfo());
}//获取用户操作类型
$action   strtolower($_GET[action]);switch ($action) {//1.登录case login:if ($_SERVER[REQUEST_METHOD]  POST) {//获取登录用户的数据:邮箱和密码$email  $_POST[email];$password  sha1($_POST[password]);// echo $password;// die($email);$result  array_filter($users, function ($user) use ($email, $password) {return $user[email]  $email  $user[password]  $password;});if (count($result)  1) {//登陆成功写入session$_SESSION[user]  serialize(array_pop($result));exit(scriptalert(验证通过); location.hrefindex.php;/script);}}//2.退出//no breakcase logout:if (isset($_SESSION[user])) {session_destroy();exit(scriptalert(退出成功);location.hrefindex.php/script);}//注册case register://1.获取新用户数据$name  $_POST[name];$email  $_POST[email];$password  sha1($_POST[p2]);$register_time  time();//2.sql$sql  SQLINSERT userSET name  ?,email  ?,password  ?,register_time  ?;   SQL;$stmt  $db-prepare($sql);$data  [$name, $email, $password, $register_time];if ($stmt-execute($data)) {if ($stmt-rowCount()  0) {//注册成功之后,让用户自动登录$sql  SELECT * FROM user WHERE id   . $db-lastInsertId();$stmt  $db-prepare($sql);$stmt-execute();$newUser  $stmt-fetch(PDO::FETCH_ASSOC);$_SESSION[user]  serialize($newUser);exit(scriptalert(注册成功);location.hrefindex.php/script);} else {exit(scriptalert(注册失败);location.hrefregister.php/script);}} else {print_r($stmt-errorInfo());}//no breakdefault:exit(参数非法或未定义操作);
}