Session的工作方式
下面我们来看一下Session是如何工作的。不知你是否知道通过Cookie来实现身份认证的吧。首先生成一个独一无二的Cookie作为用户身份的标志,并在数据库中进行注册。然后通过用户传递来的Cookie和数据库中注册的Cookie进行对照以确定用户的身份。
Session的工作原理也是这样。
首先,PHP为建立Session的用户产生一个独一无二的字符串,用来标志这个用户的session。一般将这个字符串称作Session Id。然后“sess”+Session Id为文件名(例如一个Session ID为111,那么文件名为sess_111)在服务器的文件系统中建立一个文件,在文件中保存用户在Session所定义的全局变量的变量名和值。然后再将Session Id作为一个名为PHPSession的Cookie保存在用户端的文件系统中。
然后,当用户再次连接服务器访问一个PHP脚本时,PHP从用户发来的PEESession这个Cookie中得到用户所在Session的Session Id,并根据Session Id从服务器的文件系统中保存Session信息的文件。最后从这个文件中读出用户在上次连接时所设置的全局变量的值。
因此,我们可以看到Session的工作原理和我们上一节所介绍的身份认证的工作原理是一样的。所不同的只是Session将信息保存在了服务器的文件系统中,而我们将信息保存在了数据库中。当然使用Session好处就是数据的保存和获取是由PHP自动完成的,而直接使用Cookie的话就需要自己动手进行数据的保存和获取。
Session利用Cookie的身份标志功能,将用户在浏览网站时需要保存的信息保存在服务器上。这样Session既克服了HTTP协议的缺陷,又防止了信息的泄漏,而且方便了编程者的使用,是一个非常好的解决方案。不过,Session的功能只有PHP4支持,PHP3是不支持Session的。因此使用PHP3进行网站构建的读者只能采用直接使用Cookie的方式。
相关推荐
-
Session的工作方式
下面我们来看一下Session是如何工作的.不知你是否知道通过Cookie来实现身份认证的吧.首先生成一个独一无二的Cookie作为用户身份的标志,并在数据库中进行注册.然后通过用户传递来的Cookie和数据库中注册的Cookie进行对照以确定用户的身份. Session的工作原理也是这样. 首先,PHP为建立Session的用户产生一个独一无二的字符串,用来标志这个用户的session.一般将这个字符串称作Session Id.然后"sess"+Session Id为文件名(
-
Session的工作机制详解和安全性问题(PHP实例讲解)
我们先简单的了解一些http的知识,从而理解该协议的无状态特性.然后,学习一些关于cookie的基本操作.最后,我会一步步阐述如何使用一些简单,高效的方法来提高你的php应用程序的安全性以及稳定行. 我想大多数的php初级程序员一定会认为php默认的session机制的安全性似乎是有一定保障的,事实恰好相反 – php团队只是提供了一套便捷的session的解决方案提供给程序员使用,至于安全性的话,应该由程序员来加强,这是应用程序开发团队的责任.因为,这里面的方法很多,可以这么说吧,没有最好,只
-
session的存储方式和配置方法介绍
1.Session的存储方式. session其实分为客户端Session和服务器端Session. 当用户首次与Web服务器建立连接的时候,服务器会给用户分发一个 SessionID作为标识.SessionID是一个由24个字符组成的随机字符串.用户每次提交页面,浏览器都会把这个SessionID包含在 HTTP头中提交给Web服务器,这样Web服务器就能区分当前请求页面的是哪一个客户端.这个SessionID就是保存在客户端的,属于客户端Session. 其实客户端Session默认是以co
-
javascript引用类型指针的工作方式
先看个例子: <script> var a = {n:1}; var b = a; a.x = a = {n:2}; console.log(a.x);// --> undefined console.log(b.x);// --> [object Object] </script> 上面的例子看似简单,但结果并不好了解,很容易把人们给想绕了--"a.x不是指向对象a了么?为啥log(a.x)是undefined?"."b.x不是应该跟a.
-
解决Spring session(redis存储方式)监听导致创建大量redisMessageListenerContailner-X线程问题
待解决的问题 Spring session(redis存储方式)监听导致创建大量redisMessageListenerContailner-X线程 解决办法 为spring session添加springSessionRedisTaskExecutor线程池. /** * 用于spring session,防止每次创建一个线程 * @return */ @Bean public ThreadPoolTaskExecutor springSessionRedisTaskExecutor(){ T
-
Git工作流演示及三种工作方式
目录 集中式工作流(不常用) Forking 工作流(偶尔使用) GitFlow 工作流(最流行) Git工作流演示 集中式工作流(不常用) 集中式工作流像SVN一样,以中央仓库作为项目所有修改的单点实体.所有修改都提交到 Master分支上.这种方式与 SVN 的主要区别就是开发人员有本地库,但是Git 很多特性并没有用到. Forking 工作流(偶尔使用) Forking 工作流是在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审
-
axios拦截器工作方式及原理源码解析
目录 axios 拦截器的配置方式 use() 方法的定义 拦截器如何执行 拦截器回调方法的添加顺序 同步执行请求拦截器(顺序执行) 异步执行请求拦截器(同时执行) Q&A 拦截器是如何工作的 拦截器的执行顺序 同步&异步 axios 拦截器的配置方式 本文所用 axios 版本号为:1.3.2. axios 中有两种拦截器: axios.interceptors.request.use(onFulfilled, onRejected, options):配置请求拦截器. onFulfil
-
详细讲解HTTP协议工作方式
目录 HTTP协议简介 HTTP协议概述 HTTP工作原理 基于 请求-响应 的模式 无状态保存 无连接 HTTP请求方法 GET HEAD POST PUT DELETE TRACE OPTIONS CONNECT HTTP状态码 URL HTTP请求格式(请求协议) HTTP响应格式(响应协议) HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数据通信的基础
-
python 单线程和异步协程工作方式解析
在python3.4之后新增了asyncio模块,可以帮我们检测IO(只能是网络IO[HTTP连接就是网络IO操作]),实现应用程序级别的切换(异步IO).注意:asyncio只能发tcp级别的请求,不能发http协议. 异步IO:所谓「异步 IO」,就是你发起一个 网络IO 操作,却不用等它结束,你可以继续做其他事情,当它结束时,你会得到通知. 实现方式:单线程+协程实现异步IO操作. 异步协程用法 接下来让我们来了解下协程的实现,从 Python 3.4 开始,Python 中加入了协程的概
-
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
本文实例讲述了thinkPHP多域名情况下使用memcache方式共享session数据的实现方法.分享给大家供大家参考,具体如下: 一.问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统一的,即一套用户名.密码在整个网站的各个模块中都是可以登录使用的.各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器通过统一接口对用户数据进行访问即可.但还存在一个问题,就是用户在这个服务器登录之
随机推荐
- 分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
- js获取当前日期时间及其它操作汇总
- Linux 中的Edquota命令
- Java连接Vmware中的redis
- iOS延迟执行方法详解
- Oracle 12c新特性之如何检测有用的多列统计信息详解
- JS响应鼠标点击实现两个滑块区间拖动效果
- asp.net中使用cookie传递参数的方法
- asp.net DropDownList自定义控件,让你的分类更清晰
- unity3d调用手机或电脑摄像头
- CodeIgniter中实现泛域名解析
- PHP 面向对象详解
- js资料toString 方法
- CSS或者JS实现鼠标悬停显示另一元素
- Ruby on Rails中的ActiveResource使用详解
- Lua教程(二十一):编写C函数的技巧
- java防盗链在报表中的应用实例(推荐)
- javascript中CheckBox全选终极方案
- Linux使用Cron+AT实现在某个确定的时间段内随机执行命令
- 详解Java的MyBatis框架和Spring框架的整合运用