Top Banner
Cookie, Session HTTP请求 杨亮
12

Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

Oct 13, 2018

Download

Documents

danghanh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

Cookie, Session 与HTTP请求

杨亮

Page 2: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

Web基本流程

PC Mobile

服务器(Apache)

(IIS)

后端脚本(PHP) (JSP) (ASP)

数据库(MySQL) (Oracle) (Access)

HTTP 请求

对应⽂文件 获取数据

返回数据返回⻚页⾯面返回⻚页⾯面

请求⻚页⾯面

服务器端客户端

html cssjavascript

html cssjavascript

Page 3: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

PHP基本⾓角⾊色

后端脚本(PHP) (JSP) (ASP)

数据库(MySQL) (Oracle) (Access)

html cssjavascript

前端⼯工程师 后端⼯工程师

接受请求

获取数据

处理数据

拼接⻚页⾯面

组织数据

PC Mobile

⻚页⾯面内容

⻚页⾯面外观

⻚页⾯面⾏行为

html

CSS

JavaScript管理数据

Page 4: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

公交卡 银⾏行卡

如果⼀一家咖啡店,买五杯送⼀一杯

信息存在哪⾥里?

Page 5: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

超⽂文本传输协议 HTTP HyperText Transfer Protocol

⽆无状态

Cookie Session

头部

内容(html)

Page 6: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

Cookie 保存在浏览器端的⽤用户数据,⽤用以进⾏行会话控制

浏览器端脚本(JavaScript)设定Cookie

服务器端程序(PHP)通过HTTP请求命令浏览器设定Cookie

浏览器向服务器发送请求时会附加上相应的Cookie

服务器 PHP

浏览器 Cookie Set-Cookie:user=stefyang

Cookie:user=stefyang

提交信息

name1 value1name2 value2name3 value3name4 value4

Page 7: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

五⼤大要素:名字、值、域、路径、过期时间 $_COOKIE[name]

所有Cookie都是放到http头信息中

Page 8: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

服务器 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_*进⾏行缓存

Page 9: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

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

Page 10: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

Session 保存在服务器端的⽤用户数据,⽤用以进⾏行会话控制每个会话有⼀一个session id存在Cookie中,⽤用以标⽰示session

Session由于是存在服务器端,只能由服务器端脚本(PHP)设置

Page 11: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

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

Page 12: Cookie, Session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf · 超本传输协议 HTTP HyperText Transfer Protocol 状态 Cookie Session 头部 内容 (html)

作业⼀一

学习Session与Cookie的其他细节

PMWD Chapter 23http://wenku.baidu.com/view/f822eb7faf45b307e87197ac.html