一直在使用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的工作原理相关推荐

  1. java中session的作用_java中session的工作原理是什么?和Cookies有何区别?

    现在大家学习的东西和以前大不相同了,越来越多的人倾向于去学习高新技术以获得更好的发展.java是很多人的第一选择.java中的知识还是很多的,今天就来为大家介绍一下. 首先来说一下java中sessi ...

  2. java session原理_java web开发—session的工作原理总结

    session的工作原理总结 一.什么是session session是一次浏览器和服务器交互的会话,在jsp中,作为一个内置对象存在.我的理解,就是当用户打开网页时,程序会在浏览器中开辟一段空间来存 ...

  3. session的工作原理[择]

    session的工作原理 一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是 ...

  4. HTTP Session 的工作原理以及几个思维扩展

    大家都知道,HTTP 协议本身是无状态的,Session 的出现解决了这个问题,也被大多数 Web 端采用. 但它背后的实现原理你是否有兴趣了解呢,以及在它基础上的思维发散,和你聊聊. 无状态的 HT ...

  5. Session的工作原理

    session是服务器端的一个集合,可以存储任何东西.session最重要的特性,是可以识别客户. 1.Session的工作原理 当我们的Servlet需要使用Session时,执行下面的代码 Htt ...

  6. Linux中LVM的工作原理是什么?优缺点有哪些?

    在Linux操作系统中,LVM全称Logical Volume Manager,中文意思为逻辑卷管理.之前文章为大家介绍过什么是LVM.LVM名词解释.LVM写入模式等内容,本篇文章为大家介绍一下LV ...

  7. 深入解析Android中View的工作原理

    Android中的任何一个布局.任何一个控件其实都是直接或间接继承自View实现的,当然也包括我们在平时开发中所写的各种炫酷的自定义控件了,所以学习View的工作原理对于我们来说显得格外重要,本篇博客 ...

  8. 深入浅出地理解STM32中的定时器工作原理

    深入浅出地理解STM32中的定时器工作原理 一.如何实现延时 1 纯硬件电路 2 纯软件编程 3 可编程定时/计数器 二.可编程定时/计数器有哪些功能? 三.STM32F103 的定时器有哪些 1 基 ...

  9. 会话(cookie的使用,路径和Session的工作原理,使用)

    1.状态管理----Cookie 1.1 为什么需要状态管理 HTTP协议是无状态的,不能保存每次提交的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就丢掉了. 如果用户发来一个新的请 ...

最新文章

  1. ZOJ-1654 Place the Robots---二分图最小点覆盖+构图
  2. HashMap中提到的散列是什么?
  3. DS二叉树--二叉树之数组存储
  4. mongodb自动关闭:页面文件太小,无法完成操作
  5. 60-008-026-使用-命令-如何在flink中传递参数
  6. Silverlight 2 又来了两本新书
  7. 【论文阅读】FFUNet:一种新的特征融合为医学图像分割提供了强大的解码器
  8. C++ Primer Plus学习(十三)——代码重用(has-a)
  9. 入职新公司后如何快速上手项目
  10. Python全栈开发【基础-09】深浅拷贝+while循环
  11. Conhost.exe是什么进程?为什么会启动运行?图文详解
  12. 8255A的控制字和C口状态字
  13. JAVA拾遗 — JMH与8个代码陷阱
  14. hgame-week1-web-fujiwara tofu shop
  15. 在 Linux安装Dataiku DSS步骤
  16. 【图像去噪】基于最小二乘方滤波实现图像去噪含Matlab源码
  17. Roslyn导致发布网站时报错-编译失败
  18. 领略千变万化的Android Drawable (二)
  19. matlab怎么把mat文件转化为excel
  20. 2021PHP算法期末考试-复习试题

热门文章

  1. IE弹出窗口显示URL地址栏
  2. Android的启动脚本–init.rc
  3. balanced binary search tree
  4. 实现一个用于显示当前时间的Google Android 窗口小部件(AppWidget)
  5. MS SQL入门基础:创建索引
  6. Android Stdio报错Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed
  7. Django运行报错Invalid HTTP_HOST header: ‘0.0.0.0:8000‘. You may need to add ‘0.0.0.0‘ to ALLOWED_HOSTS.
  8. Python 网易新闻热点新闻爬虫
  9. windows下配置apache虚拟主机
  10. java日期时间的转化