PHP中session的工作原理
一直在使用session存储数据,一直没有好好总结一下session的使用方式以及其工作原理
今天在这里做一下梳理
这里的介绍主要是基于php语言,其他的语言操作可能会有差别,但基本的原理不变。
1.在php中如何操作session:
session_start();
//使用该函数打开session功能
$_SESSION
//使用预定义全局变量操作数据
使用unset($_SESSION['key'])
//销毁一个session的值
简单地操作,一切都是由服务器实现;由于处理在后台,一切看起来也很安全。但是session采用什么样机制,又是怎样被实现,并且如何来保持会话的状态的呢?
2.session实现与工作原理
浏览器和服务器采用http无状态的通讯,为了保持客户端的状态,使用session来达到这个目的。然而服务端是怎么样标示不同的客户端或用户呢?
这里我们可以使用生活中的一个例子,假如你参加一个晚会,认识了很多人,你会采取什么方式来区分不同的人呢!你可能根据脸型,也有可能根据用户的名字,
或者人的身份证,即采用一个独一无二的标示。在session机制中,也采用了这样的一个唯一的session_id来标示不同的用户,不同的是:浏览器每次请求都会带上
由服务器为它生成的session_id.
简单介绍一下流程:当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器,
浏览器将这个session_id保存在内存中(还有其他的存储方式,例如写在url中),我们称之为无过期时间的cookie。浏览器关闭后,这个cookie就清掉了,它不会存在用户的cookie临时文件。
以后浏览器每次请求都会额外加上这个参数值,再服务器根据这个session_id,就能取得客户端的数据状态。
如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,只要我们知道那个session_id,就可以继续通过请求获得此session的信息;但是这个时候后台的session还存在,但是session的保存有一个过期时间,一旦超过规定时间没有客户端请求时,他就会清除这个session。
下面介绍一下session的存储机制,默认的session是保存在files中,即以文件的方式保存session数据。在php中主要根据php.ini的配置session.save_handler来选择保存session的方式。
这里顺便说明一下,如果要做服务器的lvs,即多台server的话,我们一般使用memcached的方式session,否则会导致一些请求找不到session。
一个简单的memcache配置:
session.save_handler = memcache
session.save_path = "tcp://*.*.*.*:10001"
当然如果一定要使用files文件缓存,我们可以将文件作nfs,将所有的保存session文件定位到一个地方。
刚才讲返回给用户的session-id最终保存在内存中,这里我们也可以设置参数将其保存在用户的url中。
3.实例问题
现有系统A,B; 假设A系统是可以独立运行的web系统,即可以和浏览器直接处理session, B系统是基于mobile的,需要调用A系统的功能接口,
在保持A不改变的情况下,即登陆验证,session存储都不变的情况下,B系统能处理前端用户的请求。
这里提供的方案是使用PHP实现
在用户登陆成功后,将保存的session的session-id返回给B系统,然后B系统每次请求其他接口都带session_id。
A系统在session_start前加上session_id(session_id);
这样B系统就能安全的调用A
PHP中session的工作原理相关推荐
- java中session的作用_java中session的工作原理是什么?和Cookies有何区别?
现在大家学习的东西和以前大不相同了,越来越多的人倾向于去学习高新技术以获得更好的发展.java是很多人的第一选择.java中的知识还是很多的,今天就来为大家介绍一下. 首先来说一下java中sessi ...
- java session原理_java web开发—session的工作原理总结
session的工作原理总结 一.什么是session session是一次浏览器和服务器交互的会话,在jsp中,作为一个内置对象存在.我的理解,就是当用户打开网页时,程序会在浏览器中开辟一段空间来存 ...
- session的工作原理[择]
session的工作原理 一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是 ...
- HTTP Session 的工作原理以及几个思维扩展
大家都知道,HTTP 协议本身是无状态的,Session 的出现解决了这个问题,也被大多数 Web 端采用. 但它背后的实现原理你是否有兴趣了解呢,以及在它基础上的思维发散,和你聊聊. 无状态的 HT ...
- Session的工作原理
session是服务器端的一个集合,可以存储任何东西.session最重要的特性,是可以识别客户. 1.Session的工作原理 当我们的Servlet需要使用Session时,执行下面的代码 Htt ...
- Linux中LVM的工作原理是什么?优缺点有哪些?
在Linux操作系统中,LVM全称Logical Volume Manager,中文意思为逻辑卷管理.之前文章为大家介绍过什么是LVM.LVM名词解释.LVM写入模式等内容,本篇文章为大家介绍一下LV ...
- 深入解析Android中View的工作原理
Android中的任何一个布局.任何一个控件其实都是直接或间接继承自View实现的,当然也包括我们在平时开发中所写的各种炫酷的自定义控件了,所以学习View的工作原理对于我们来说显得格外重要,本篇博客 ...
- 深入浅出地理解STM32中的定时器工作原理
深入浅出地理解STM32中的定时器工作原理 一.如何实现延时 1 纯硬件电路 2 纯软件编程 3 可编程定时/计数器 二.可编程定时/计数器有哪些功能? 三.STM32F103 的定时器有哪些 1 基 ...
- 会话(cookie的使用,路径和Session的工作原理,使用)
1.状态管理----Cookie 1.1 为什么需要状态管理 HTTP协议是无状态的,不能保存每次提交的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就丢掉了. 如果用户发来一个新的请 ...
最新文章
- ZOJ-1654 Place the Robots---二分图最小点覆盖+构图
- HashMap中提到的散列是什么?
- DS二叉树--二叉树之数组存储
- mongodb自动关闭:页面文件太小,无法完成操作
- 60-008-026-使用-命令-如何在flink中传递参数
- Silverlight 2 又来了两本新书
- 【论文阅读】FFUNet:一种新的特征融合为医学图像分割提供了强大的解码器
- C++ Primer Plus学习(十三)——代码重用(has-a)
- 入职新公司后如何快速上手项目
- Python全栈开发【基础-09】深浅拷贝+while循环
- Conhost.exe是什么进程?为什么会启动运行?图文详解
- 8255A的控制字和C口状态字
- JAVA拾遗 — JMH与8个代码陷阱
- hgame-week1-web-fujiwara tofu shop
- 在 Linux安装Dataiku DSS步骤
- 【图像去噪】基于最小二乘方滤波实现图像去噪含Matlab源码
- Roslyn导致发布网站时报错-编译失败
- 领略千变万化的Android Drawable (二)
- matlab怎么把mat文件转化为excel
- 2021PHP算法期末考试-复习试题
热门文章
- IE弹出窗口显示URL地址栏
- Android的启动脚本–init.rc
- balanced binary search tree
- 实现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)
- MS SQL入门基础:创建索引
- Android Stdio报错Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed
- Django运行报错Invalid HTTP_HOST header: ‘0.0.0.0:8000‘. You may need to add ‘0.0.0.0‘ to ALLOWED_HOSTS.
- Python 网易新闻热点新闻爬虫
- windows下配置apache虚拟主机
- java日期时间的转化