理清了cookie与session之间的调用逻辑。

session_start()

在a.php加入:

$_SESSION['a']=”a”;

echo $_SESSION['a'];

在游览器里运行a.php,查看头信息:

请求:

GET /a.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Cookie: Hm_lvt_2ce2628c9a3dcbc8164433b1cc152d3e=1433243616

Connection: keep-alive

Cache-Control: max-age=0

返回:

HTTP/1.1 200 OK

Date: Wed, 22 Jul 2015 03:18:52 GMT

Server: Apache/2.4.10 (Ubuntu)

Content-Length: 1

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=UTF-8

可以看到,第一次访问该页面时,如果没有使用 session_start(),则什么都不会发生,游览器给服务器的请求中的 Cookie: Hm_lvt_2ce2628c9a3dcbc8164433b1cc152d3e=1433243616 与我们的服务器没有任何关系。

现在在a.php中加入 sesion_start() 后查看头信息:

请求:

GET /a.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Cookie: Hm_lvt_2ce2628c9a3dcbc8164433b1cc152d3e=1433243616

Connection: keep-alive

Cache-Control: max-age=0

返回:

HTTP/1.1 200 OK

Date: Wed, 22 Jul 2015 03:29:45 GMT

Server: Apache/2.4.10 (Ubuntu)

Set-Cookie: PHPSESSID=pp0j7k2mbst4ejtdnt1vrilt70; path=/

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Content-Length: 0

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=UTF-8

可以看到,当我们使用了 session_start() 后,服务器会先检查是否在这次回话之前有用过session,如果没有,就会在返回的头信息中加入 Set-Cookie: PHPSESSID=pp0j7k2mbst4ejtdnt1vrilt70; path=/ 来告诉游览器,我需要用到cookie

并且如果使用php默认的session设置的话,就会在默认的路径穿件一个以 PHPSESSID 为名称的文件:

我们查看一下文件内容,会发现此时没有任何内容:

session_encode() 和 session_decode()

现在我们已经开启了session,接下来就是往session里放点数据:

session_start();

$_SESSION['ss']="a";

echo $_SESSION['ss'];

?>

执行一下a.php,查看头部信息:

请求:

GET /a.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Cookie: Hm_lvt_2ce2628c9a3dcbc8164433b1cc152d3e=1433243616; PHPSESSID=pp0j7k2mbst4ejtdnt1vrilt70

Connection: keep-alive

Cache-Control: max-age=0

返回:

HTTP/1.1 200 OK

Date: Wed, 22 Jul 2015 03:33:18 GMT

Server: Apache/2.4.10 (Ubuntu)

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Content-Length: 1

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=UTF-8

这次我们看到游览器的请求中给 Cookie 参数加上了刚才服务器返回的 Set-Cookie 参数 :

Cookie: Hm_lvt_2ce2628c9a3dcbc8164433b1cc152d3e=1433243616; PHPSESSID=pp0j7k2mbst4ejtdnt1vrilt70

当服务器收到请求中发现头部的 Cookie 参数里有对应的 session_id 就会去去读改文件,这时候我们看下这个sesion文件的内容:

其实文件的内容就是 session_encode() 的结果,该函数会将$_SESSION变量进行 serialize() 操作。而 session_decode() 就是对session文件内容进行 unserialize() 操作。

让我们再试一次,修改a.php:

session_start();

$_SESSION['ss']="a";

$_SESSION['ss1']=100;

$_SESSION['aa3']=array("a1"=>1,"a2"=>"fds");

$_SESSION['o1']=new A();

class A{

public $b1="1";

public function aa(){

return "11";

}

}

?>

运行后查看session文件内容:

$_SESSION['ss']="a"; ss|s:1:”a”;

$_SESSION['ss1']=100; ss1|i:100;

$_SESSION['aa3']=array("a1"=>1,"a2"=>"fds"); aa3|a:2{s:2:"a1";i:1;s:2:"a2";s:3:"fds";}

$_SESSION['o1']=new A(); o1|O:1:"A":1:{s:2:"b1";s:1:"1";}

session_id()

修改a.php:

echo session_id("11111");

session_start();

$_SESSION['ss']="a11";

?>

执行后查看头信息:

请求:

GET /a.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate

Cookie: Hm_lvt_2ce2628c9a3dcbc8164433b1cc152d3e=1433243616; PHPSESSID=11111

Connection: keep-alive

Cache-Control: max-age=0

返回:

HTTP/1.1 200 OK

Date: Wed, 22 Jul 2015 03:55:15 GMT

Server: Apache/2.4.10 (Ubuntu)

Set-Cookie: PHPSESSID=11111; path=/

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Content-Length: 0

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=UTF-8

注意 Set-Cookie: PHPSESSID=11111; path=/ , 可以看到 session_id() 的作用就是设置 Cookie 的 PHPSESSID的值

session_name()

修改a.php:

session_name("好人");

session_start();

?>

返回:

HTTP/1.1 200 OK

Date: Wed, 22 Jul 2015 04:02:24 GMT

Server: Apache/2.4.10 (Ubuntu)

Set-Cookie: %E5%A5%BD%E4%BA%BA=mpggc83j5v5ctek870r7f6kql6; path=/

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Content-Length: 0

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html; charset=UTF-8

注意 Set-Cookie: %E5%A5%BD%E4%BA%BA=mpggc83j5v5ctek870r7f6kql6; path=/ ,可以看到 session_name()就是替换前面 PHPSESSID 这个的名称。

查看下这个session文件:

session_unset() 和 session_destroy()

修改a.php,调用一下 session_unset() 函数:

session_name("好人");

session_start();

$_SESSION['ss']="a11";

$_SESSION['ss1']=100;

$_SESSION['aa3']=array("a1"=>1,"a2"=>"fds");

$_SESSION['o1']=new A();

session_unset();

class A{

public $b1="1";

public function aa(){

return "11";

}

}

?>

查看下session文件:

发现文件还在,但是内容没有了

修改a.php,调用一下 session_destroy() 函数:

session_name("好人");

session_start();

$_SESSION['ss']="a11";

$_SESSION['ss1']=100;

$_SESSION['aa3']=array("a1"=>1,"a2"=>"fds");

$_SESSION['o1']=new A();

echo $_SESSION['ss'];

session_destroy();

echo $_SESSION['ss'];

class A{

public $b1="1";

public function aa(){

return "11";

}

}

?>

执行后发现文件没有了:

但是$_SESSION变量的内容还存在:

这就是为什么我们如果要正真销毁session时,必须执行 session_unset() 和 session_destroy() 的原因,一个将session删掉,一个将内存中的内容删掉,只执行其中一个并不能彻底删除session

PHP session流程

其他文献:

php研究成果,PHP session 与 cookie 自己的研究成果相关推荐

  1. 白话 Session 与 Cookie:从经营杂货店开始

    在Web开发里面有一个历久不衰的议题,那就是Session与Cookie的区别.从我刚开始学程序时这一题就常出现在面试考题里,一直到现在都还是能看见这个问题. 这个问题重要吗? 我觉得满重要的.因为S ...

  2. qq空间登陆 cookie_把这篇 Session、Cookie、Token看完,和面试官随便谈人生

    先看大纲: Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie ...

  3. ajax获取session值_java程序员你真的了解session与cookie吗?

    1.基础: session信息是保存在服务器端,而cookie是保存在客户端(浏览器),这个是最基础的概念,如果你这一点都不知道,再去查查资料再往下读. 具体的js.java相关的session与co ...

  4. qq空间登陆 cookie_看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了||CSDN博文精选...

    作者:程序员cxuan Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 ...

  5. 拜托!不要再问我Session与Cookie的区别了

    点击上方"民工哥技术之路"选择"星标" 每天10点为你分享不一样的干货 从我刚开始学程序时这一题就常出现在面试考题里,一直到现在都还是能看见这个问题. 这个问题 ...

  6. 什么是cookie?什么是session?cookie与session有什么区别

    cookie与session的由来: 网址的发展史:1.起初网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的.比如:新闻网页,博客网页,小说... (这些网页是不需要登录后才能访问的,每 ...

  7. php session.cookie_path,php session和cookie使用说明

    php session和cookie使用说明 更新时间:2010年04月07日 14:23:49   作者: php session和cookie使用说明,需要的朋友可以参考下. 1. PHP的COO ...

  8. C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie

    由于种种原因,我们有时需要从互联网上抓取一些资料,有些页面可以直接打开,而有些页面必登录之后才能打开.本文介绍的是使用 HttpWebRequest 和 HttpWebResponse 自动填写提交 ...

  9. 单点登录与权限管理本质:session和cookie介绍

    本篇开始写「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,这部分主要介绍相关的知识概念.抽象的处理过程.常见的实现框架.通过这部分的介绍,能够对单点登录与权限管理有整体上的了解,对其相关 ...

最新文章

  1. 开源软硬一体OpenCV AI Kit(OAK)
  2. 洛谷—P1307 数字反转
  3. 查看linux的计划任务日志,查看计划任务日志(共5篇).docx
  4. EGLSurface 和 OpenGL ES
  5. 快速突破面试算法之链表篇
  6. Ubuntu20安装搜狗拼音输入法
  7. 【Java 实战】实现大转盘抽奖
  8. FTP-文件传输协议
  9. Thinking in java 4th the pitfall of Generic
  10. 浙江大学计算机学院何钦铭,浙江大学导师介绍--何钦铭
  11. 数字基建系列(一)数分如何参与埋点工作
  12. 物联网设备模糊:DIANE:识别应用程序中的模糊触发器,为物联网设备生成受限制的输入
  13. MonoDevelop花括号(大括号)自动补全
  14. 计算机认识新朋友教案,幼儿园认识新朋友教案
  15. 详解DDD“洋葱架构”
  16. windows下MySQL修改root密码
  17. 解题报告 (十) 单调栈
  18. 《共享经济》创业沙龙
  19. 路由器的作用及其结构
  20. 手把手教你提交Jar包到Maven公共仓库

热门文章

  1. 自制USB接口供电的手机电池充电器电路
  2. M201: MongoDB Performance chapter 2 Mongodb Indexes学习记录
  3. [oeasy]python0123_中文字符_文字编码_gb2312_激光照排技术_王选
  4. python为什么有这么多库_为什么C++没有Python那么多开源库?
  5. 《计算机网络》---简答题(二)
  6. 借助这几个工具,轻松实现在手机压缩视频
  7. 2014.03.16 网易游戏TTT计划实习生笔试题
  8. 数据库存储解决方案:网络附加存储(NAS)是个好选择吗?
  9. 从c语言到Python (4)循环语句
  10. Linux学习路线图及常逛自学网站推荐