cookie, session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf ·...
TRANSCRIPT
Web基本流程
PC Mobile
服务器(Apache)
(IIS)
后端脚本(PHP) (JSP) (ASP)
数据库(MySQL) (Oracle) (Access)
HTTP 请求
对应⽂文件 获取数据
返回数据返回⻚页⾯面返回⻚页⾯面
请求⻚页⾯面
服务器端客户端
html cssjavascript
html cssjavascript
PHP基本⾓角⾊色
后端脚本(PHP) (JSP) (ASP)
数据库(MySQL) (Oracle) (Access)
html cssjavascript
前端⼯工程师 后端⼯工程师
接受请求
获取数据
处理数据
拼接⻚页⾯面
组织数据
PC Mobile
⻚页⾯面内容
⻚页⾯面外观
⻚页⾯面⾏行为
html
CSS
JavaScript管理数据
Cookie 保存在浏览器端的⽤用户数据,⽤用以进⾏行会话控制
浏览器端脚本(JavaScript)设定Cookie
服务器端程序(PHP)通过HTTP请求命令浏览器设定Cookie
浏览器向服务器发送请求时会附加上相应的Cookie
服务器 PHP
浏览器 Cookie Set-Cookie:user=stefyang
Cookie:user=stefyang
提交信息
name1 value1name2 value2name3 value3name4 value4
服务器 PHP
浏览器 Cookie
Set-Cookie:user=stefyang
Cookie:user=stefyang
time() 当前时间 time()+60*60 ⼀一个⼩小时后time()+60*60*24 ⼀一天后 time()+60*60*24*7 ⼀一周后time()-60*60 ⼀一个⼩小时前,相当于删除这条Cookie,也可只加$name字段
0 当浏览器关闭时删除
/ 根⺫⽬目录,⺴⽹网站中的所有脚本都发此Cookie/foo/ ⺴⽹网站中/foo/⽂文件夹及其⼦子⽂文件夹下的所有脚本都发此Cookie
bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )
时间戳 路径
域名
www.a.com 只有这个域名下的脚本发送此Cookie,⼦子域名都不发送.a.com 这个域名及其⼦子域名下的脚本发送此Cookie,
setcookie之前不能有输出及html代码,可使⽤用ob_*进⾏行缓存
3 <body>4 <?php5 if(isset($_COOKIE['login']) && 1==$_COOKIE['login']) {6 if (isset($_COOKIE['username'])) {7 $username = $_COOKIE['username'];8 echo 'Hello '.$username.' <a href="log.php?action=logout">logout</a>';9 }else{
10 setcookie('login','',time()-1);11 echo 'Please <a href="login.htm">login</a>';12 }13 }else{14 echo 'Please <a href="login.htm">login</a>';15 }16 ?>17 </body>18 </html>1 <?php2 if (isset($_REQUEST['action'])) {3 $action = $_REQUEST['action'];4 if (!strcmp($action, 'login')) {5 setcookie('username',$_POST['username'],time()+3600);6 setcookie('login',1, time()+3600);7 header("Location:homepage.php");8 }elseif (!strcmp($action, 'logout')) {9 setcookie('username',$_POST['username'],time()-3600);
10 setcookie('login',1, time()-3600);11 header("Location:homepage.php");12 }16 ?>
hoempage.php
log.php
4 <form action="log.php?action=login" method="post">5 username: <input type="text" name="username"><br>6 passowrd: <input type="password" name="password"><br>7 <input type="submit" value="submit">8 </form>
login.htm
Session 保存在服务器端的⽤用户数据,⽤用以进⾏行会话控制每个会话有⼀一个session id存在Cookie中,⽤用以标⽰示session
Session由于是存在服务器端,只能由服务器端脚本(PHP)设置
Session启动 session_start() 是否有session存在
启动对应的session
创建新的session
N
Y
Session注销 session_destroy()
Session的使⽤用 $_SESSION[name]和unset($_SESSION[name])
删除对应⽂文件
session_start()之前不能有任何输出
由于Session和Cookie都使⽤用Cookie
因此都要操作HTTP头信息因此相关语句前不能有html⻚页⾯面内容输出
使⽤用⻚页⾯面缓存技术
ob_start();
ob_end_flush();
缓存html不输出
输出html