会话机制

Cookie/Session:

在web应用中,常用的会话追踪机制是Cookie和Session。而Cookie是通过在浏览器里记录确定用户身份,Session在服务器端记录信息确定用户身份。

Http协议:

http协议本身是无状态的,也就是说我们无法通过http协议来确定该次请求的用户身份,所以,通常的做法是需要通过Cookie和Session机制确定会话用户身份。

Cookie

简介:

Cookie是存储在客户端的,用来记录信息。其实单纯来说,仅采用Cookie也是可以追踪用户会话,只是这样安全性会大大降低(例如:最粗暴的将用户登录的用户名、密码写入cookie,每次请求验证用户名密码,根据验证结果决定是否允许进行接下来的业务处理)。

Cookie创建及如何发送给客户端:

cookie创建:cookie由服务端创建(也就是服务端决定要往cookie写入什么内容)。在PHP中,当setCookie函数执行后,默认会将cookie写入到客户端中。

setCookie('name', 'nameValue');

echo 'success';

当在浏览器中执行上述代码时,会将cookie写入到浏览器中。

Cookie使用:

cookie一般是在登录成功后,完成写入,将其返回给客户端。客户端下次请

求时会带入cookie,服务端通过获取cookie内容进行验证会话信息。

Cookie有效期及跨域问题:

cookie是可以设置有效期的,默认是浏览器关闭时,cookie自动失效。

cookie存在跨域问题(浏览器同源策略保护),例如,childB.B.com和Child2B.B.com虽然都在一级域名B.com下,但是由于二级域名不同,所以cookie也无法在Child2B.B.com下使用(这也是为什么前后端分离项目中,不采用cookie、session机制的原因)。

跨域问题解决:

跨域问题可以通过在服务端设置允许cookie访问的域名或在nginx中配置允许跨域域名Cookie跨域解决方案

header('Access-Control-Allow-Origin: Child2B.B.com');

header('Access-Control-Allow-Credentials: true');

Session:

简介:

在服务端保存用户信息,追踪用户的会话记录。

原理分析:

当浏览器通过http协议请求服务端时,服务端会为用户创建session。在创建session时,会检查是否包含一个唯一的会话id,即sessionId。

(1)若有该sessionId,则表示已经为用户创建过会话,通过sessionId从session中获取用户信息,执行下面的业务处理;

(2)若没有该sessionId,则表示还未创建过会话,服务端会创建session,为该session关联唯一的sessionId,将sessionId返回客户端。

通常情况下,session会和cookie配合使用,即将session生成的sessionId通过cookie写入浏览器。浏览器在下次请求时,带入cookie,服务端通过cookie获取sessionId,进而获取session信息。

禁用cookie的sessionId Url重写:

当浏览器禁用cookie时,是没法通过cookie带入sessionId的,可以通过将sessionId附着在url中传入服务端。

在PHP中当php.ini中的session.use_trans_sid = 1时,若浏览器禁用cookie会自动将sessionId附着在url上进行传递。

PHP对session的处理方式:

PHP默认通过文件的形式存储session,即生成sessionId时,相应服务器也会生成一个sess_sessionId的文件,在该文件中会存储session信息。

PHP支持通过session_set_save_handler()函数设置支持的session驱动session_set_save_handler()函数,要求自定义的session处理类需要实现SessionHandlerInterface接口(或者是已经实现了该接口的sessionHandler)。

例如:在tp5中,实现了三种驱动方式:redis/memcache/memcached。

会话机制小结:

总得来说,由于http协议的无状态,所以需要单独的会话追踪机制来保持用户会话,session是在服务端存储用户信息追踪会话,cookie是在客户端存储用户信息。session在服务端生成sessionId,通常做法是需要通过浏览器cookie来存储,配合使用来确定用户会话信息。

php session 机制,Cookie、Session机制详解及PHP中Session处理相关推荐

  1. Session机制详解及分布式中Session共享解决方案

    Session机制详解及分布式中Session共享解决方案 参考文章: (1)Session机制详解及分布式中Session共享解决方案 (2)https://www.cnblogs.com/jing ...

  2. 【微服务之分布式Session】Session机制详解及分布式中Session共享解决方案

    一.为什么要产生Session http协议本身是无状态的,客户端只需要向服务器请求下载内容,客户端和服务器都不记录彼此的历史信息,每一次请求都是独立的. 为什么是无状态的呢?因为浏览器与服务器是使用 ...

  3. session、cookie、token 详解

    发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应,  尤其是我不用 ...

  4. python中requests库的用途-python中requests库session对象的妙用详解

    在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有时候需要保持一些共用的数据,例如cookies信息. 妙用1 requests库的session对象能够帮我们跨请求保持某些参数,也 ...

  5. 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)

    作者 | 蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attention小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的注意力机制(二) 四万字全面详解 ...

  6. 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attenion小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的 ...

  7. 【NLP】四万字全面详解 | 深度学习中的注意力机制(二)

    NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记  前情提要:四万字全面详解 | 深度学习中的注意力机制(一) 目前深度学习中热点之一就是注意力机制(Attention ...

  8. 第43课: Spark 1.6 RPC内幕解密:运行机制、源码详解、Netty与Akka等

    第43课: Spark 1.6 RPC内幕解密:运行机制.源码详解.Netty与Akka等 Spark 1.6推出了以RpcEnv.RPCEndpoint.RPCEndpointRef为核心的新型架构 ...

  9. 【JVM】Java垃圾回收机制(GC)详解

    Java垃圾回收机制(GC)详解 一.为什么需要垃圾回收? 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收.除非内存无限大,我们可以任性的分配不回收,但是事实并非如 ...

最新文章

  1. DIV CSS完美兼容IE6/IE7/FF的通用方法
  2. 华师大计算机入门模拟卷,计算机入门模拟卷A-华东师范大学.docx
  3. python字符型数据_Python基础【第五篇】:基础数据类型(字符型)
  4. 网络推广外包专员浅析为何网站网络推广外包中有排名却没有转化率
  5. Minimal Square CodeForces - 1360A(简单思维和图形判断)
  6. composer中文阿里云镜像地址
  7. 对话框--popdialog总结
  8. xampp错误: mysql 非正常关闭._mysql数据库DBA实用技巧--为你的数据库开启Innodb监控...
  9. 10.31课程.this指向
  10. JS Grid插件使用
  11. java1.4.2中文下载_j2sdk1.4.2|Java 2 SDK Standard Edition(Java开发平台)下载v1.4.2官方版 - 欧普软件下载...
  12. MySQL学习笔记.数据的导入和导出
  13. pycharm+python3.6安装pywifi
  14. 教师计算机研修培训日志感言,2019年教师研修感言
  15. Qt模仿360系统托盘
  16. 利用批处理添加受信任站点
  17. 从汇编指令解决浮点数疑问
  18. 华为鸿蒙os对比安卓系统,华为手机鸿蒙OS 2.0、EMUI 11界面对比:安卓底层没了
  19. MySQL 的分页查询 SQL 语句
  20. android+9切图工具下载,图片分割工具(9Cut)

热门文章

  1. Swift 将日期转化为字符串,显示上午还是下午
  2. 关于Java Collections的几个常见问题
  3. iOS开发内购图文教程
  4. jQuery 事件 - bind() 方法
  5. [oracle] 组织架构退格显示 connect by
  6. [0716] Jsoi B Rsss
  7. [Bugku][Web][CTF] 30-33 write up
  8. vue devtools面板没有显示_vue 基础入门(四)
  9. 3578. 最大中位数
  10. oracle12 扩充表空间,oracle查询及扩充表空间