PHPer 高手之路
  • Introduction
  • First Chapter
  • 基础
    • 数据类型和常量
    • 字符串
      • 字符编码
      • 字符编码相关编程
    • 引用变量
    • 运算符与错误控制符@
    • 流程控制与条件判断
      • foreach遍历中的引用
    • 函数
    • 文件及目录处理
  • PHP 数组
    • 基础
    • PHP数组操作
    • 输入流 php://input
    • PHP数组的内部实现
    • PHP数组和数据结构
    • 示例技巧
  • PHP文件编程
    • 文件系统
    • 基础
    • 实例技巧
    • PHP中XML处理
    • PHP中JSON处理
    • PHP中CSV处理
    • 大文件上传
  • 正则表达式
    • 基础
    • 正则的引擎
    • 表达式的优化
    • PHP中正则的使用
  • PHP 编码技巧
    • PHP编码习惯
    • PHP语法糖
    • PHP代码优化
    • PHP重点新特性
    • PHP编码规范
  • PHP选项和运行原理
    • PHP SAPI
    • PHP运行模式及安装方式
    • 附录:进程和线程的Q解
    • Apache下的MPM模式
    • Apache 与 Nginx
    • PHP的运行机制及原理
    • PHP垃圾回收机制
    • PHP配置选项
  • PHP安全
    • 跨站脚本攻击(XSS )
    • 跨站请求伪造(CRSF)
  • PHP 高级特性
    • 异常处理(Exceptions)
    • 代码复用(Trait)
    • 预定义接口(Predefined Interfaces)
    • 魔术方法(Magic Methods)
    • 回调函数、匿名函数&闭包
    • 命名空间(Namespaces)
    • 自动加载(Autoload)
    • 反射(Reflection)
    • 魔术常量(Magic constants)
    • 综合实例
  • 附录:关键词
  • 附录:资料
  • 代码的版本控制
    • SVN
    • Git
      • 疑难杂症
  • Linux
    • Linux原理与基础
    • 常见命令
    • Shell 编程
    • awk 与 sed
    • 命令笔记
  • HTTP 协议
    • 请求方法与返回状态码
    • Cookie、Session 的原理
  • MySQL
    • MySQL表存储引擎
  • 标准PHP库(SPL)
    • 数据结构
      • SplPriorityQueue - 优先队列
      • SplQueue - 队列
      • SplStack - 栈的功能
    • 接口
      • Countable - count统计接口
  • 附录:ElasticSearch
  • PHP数据结构
  • 附录:Rabbitmq
  • 附录:guzzle
  • JavaScript
    • 附录:资料
  • 疑难杂症
Powered by GitBook
On this page
  • cookie
  • session
  • 相关问题

Was this helpful?

  1. HTTP 协议

Cookie、Session 的原理

cookie

cookie 是什么?

cookie使用来跟踪用户会话的技术.cookie本身是一小段文本信息,它存在与http协议header头域里,通过http协议来传递.

cookie 用来干什么?

http协议是一种无状态协议,客户端和服务端完成一次会话后,服务器端不知道下次连接到服务端的是不是同一个客户端,需要有个标识能告诉服务端,是哪个客户端连接上了服务端.例如登录用户,需要有个东西标识,那就在客户端保存一个cookie,下次访问的时候随http header一起发到服务端,服务端根据cookie的内容知道了这是某个用户的请求,服务端根据cookie取到该用户的信息,返回给客户端

cookie 工作原理是什么?

以用户登录来举例

  1. 小明访问某一网站 aa.com的登录页面, 此时通过浏览器发了一个http request请求,此时http header头域的cookie值可以是空的

  2. xx.com服务器收到这个请求,并接受了小明提交过来的登录数据,判断用户名和密码都正确,这个时候服务器会"种下一个cookie"--一般是将小明的用户名发给客户端,通常是"Cookie: usernick=xiaoming;"这个字符串通过http response返回给客户端(浏览器)

  3. 浏览器收到http response返回来的信息发现cookie了,然后将该信息写入到浏览器的某个存储文件中去

  4. 小明再访问xx.com的其他页面的时候,请求的http header中会带着这个cookie

  5. 服务器的程序会找cookie,并根据cookie的信息取出信息并返回给客户端

session

session是什么?

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。

ession能干什么?

cookie能做的他能做,cookie不能做的他也能做!

session是怎么工作的?

  1. 用户请求login.php填写数据后提交

  2. 服务器收到提交的数据取得用户信息,将用户信息存入session,并将session_id通过cookie的形式发给客户端

  3. 客户端将session_id存入浏览器cookie文件

  4. 用户再次访问其他页面时,将有session_id的cookie通过header头发给服务端

  5. 服务端拿到session_id从session中取到用户信息并返回

session存储的内容是怎么样的?

uid|i:123;abc|O:1:"a":2:{s:1:"s";s:4:"test";s:1:"b";a:2:{i:0;s:2:"12";i:1;s:2:"34";}}

session中怎么存储的?

序列化serialize

相关问题

问题1.session的有效期?

由php.ini中的session配置决定( session.cookie_lifetime = 0 session.gc_maxlifetime = 600 )

问题2.关闭客户端可以删除session或者使session失效吗?

不能删除session,但有可能使session失效 .使其失效的原因是如果配置的session有效期是cookie随着浏览器失效.

问题3.如果浏览器不支持cookie,session能正常使用吗?

可以,将session通过url传递

问题4.如果服务端有多台服务器,session如何共享?

  1. nfs, 将多台服务器所在的session存储目录设置为mount挂载的目录

  2. memcache,session.save_handler = memcache并设置路径session.save_path = "tcp://192.168.1.101:11211"

  3. mysql,ession.save_handler = user,然后建立session表,建立php文件用于对数据库表操作session数据,最后用session的都引入上一步中的php文件

Previous请求方法与返回状态码NextMySQL

Last updated 5 years ago

Was this helpful?