cookie, session - yangliang.github.ioyangliang.github.io/ppt/php/08-cookie.pdf ·...

12
Cookie, Session HTTP请求 杨亮

Upload: danghanh

Post on 13-Oct-2018

250 views

Category:

Documents


0 download

TRANSCRIPT

Cookie, Session 与HTTP请求

杨亮

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管理数据

公交卡 银⾏行卡

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

信息存在哪⾥里?

超⽂文本传输协议 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

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

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

服务器 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

作业⼀一

学习Session与Cookie的其他细节

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