php研究成果,PHP session 与 cookie 自己的研究成果
理清了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 自己的研究成果相关推荐
- 白话 Session 与 Cookie:从经营杂货店开始
在Web开发里面有一个历久不衰的议题,那就是Session与Cookie的区别.从我刚开始学程序时这一题就常出现在面试考题里,一直到现在都还是能看见这个问题. 这个问题重要吗? 我觉得满重要的.因为S ...
- qq空间登陆 cookie_把这篇 Session、Cookie、Token看完,和面试官随便谈人生
先看大纲: Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 Cookie ...
- ajax获取session值_java程序员你真的了解session与cookie吗?
1.基础: session信息是保存在服务器端,而cookie是保存在客户端(浏览器),这个是最基础的概念,如果你这一点都不知道,再去查查资料再往下读. 具体的js.java相关的session与co ...
- qq空间登陆 cookie_看完这篇 Session、Cookie、Token,和面试官扯皮就没问题了||CSDN博文精选...
作者:程序员cxuan Cookie 和 Session HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录:Session 和 ...
- 拜托!不要再问我Session与Cookie的区别了
点击上方"民工哥技术之路"选择"星标" 每天10点为你分享不一样的干货 从我刚开始学程序时这一题就常出现在面试考题里,一直到现在都还是能看见这个问题. 这个问题 ...
- 什么是cookie?什么是session?cookie与session有什么区别
cookie与session的由来: 网址的发展史:1.起初网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的.比如:新闻网页,博客网页,小说... (这些网页是不需要登录后才能访问的,每 ...
- php session.cookie_path,php session和cookie使用说明
php session和cookie使用说明 更新时间:2010年04月07日 14:23:49 作者: php session和cookie使用说明,需要的朋友可以参考下. 1. PHP的COO ...
- C# 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
由于种种原因,我们有时需要从互联网上抓取一些资料,有些页面可以直接打开,而有些页面必登录之后才能打开.本文介绍的是使用 HttpWebRequest 和 HttpWebResponse 自动填写提交 ...
- 单点登录与权限管理本质:session和cookie介绍
本篇开始写「单点登录与权限管理」系列的第一部分:单点登录与权限管理本质,这部分主要介绍相关的知识概念.抽象的处理过程.常见的实现框架.通过这部分的介绍,能够对单点登录与权限管理有整体上的了解,对其相关 ...
最新文章
- 开源软硬一体OpenCV AI Kit(OAK)
- 洛谷—P1307 数字反转
- 查看linux的计划任务日志,查看计划任务日志(共5篇).docx
- EGLSurface 和 OpenGL ES
- 快速突破面试算法之链表篇
- Ubuntu20安装搜狗拼音输入法
- 【Java 实战】实现大转盘抽奖
- FTP-文件传输协议
- Thinking in java 4th the pitfall of Generic
- 浙江大学计算机学院何钦铭,浙江大学导师介绍--何钦铭
- 数字基建系列(一)数分如何参与埋点工作
- 物联网设备模糊:DIANE:识别应用程序中的模糊触发器,为物联网设备生成受限制的输入
- MonoDevelop花括号(大括号)自动补全
- 计算机认识新朋友教案,幼儿园认识新朋友教案
- 详解DDD“洋葱架构”
- windows下MySQL修改root密码
- 解题报告 (十) 单调栈
- 《共享经济》创业沙龙
- 路由器的作用及其结构
- 手把手教你提交Jar包到Maven公共仓库
热门文章
- 自制USB接口供电的手机电池充电器电路
- M201: MongoDB Performance chapter 2 Mongodb Indexes学习记录
- [oeasy]python0123_中文字符_文字编码_gb2312_激光照排技术_王选
- python为什么有这么多库_为什么C++没有Python那么多开源库?
- 《计算机网络》---简答题(二)
- 借助这几个工具,轻松实现在手机压缩视频
- 2014.03.16 网易游戏TTT计划实习生笔试题
- 数据库存储解决方案:网络附加存储(NAS)是个好选择吗?
- 从c语言到Python (4)循环语句
- Linux学习路线图及常逛自学网站推荐