php中session的相关知识

近期在做登陆相关的东西,所以又重新接触了session的一些知识,可以分享出来。

因为http是无状态的,所以为了记住客户端和服务端之间的关系,http协议在其中增加了cookie这个东西,它也是附加在http协议中的。其中cookie的设置是在响应头中,Set-Cookie:,它会告诉客户端需要设置的cookie以及一些属性,而客户端在请求的时候也会在请求头中带上本地的Cookie内容。通过cookie我们就可以标识客户端(当然,该cookie必须只跟该客户端对应),如果客户端禁用掉cookie,还有一种方式就是将cookie的内容通过uri参数或者隐藏的post域提交。

session的产生就是为了维护客户端状态的一种东西,一般来讲,如果客户端没有被服务端标识,即用户是第一次访问应用,这时候服务器会通过session_id 生成一个唯一的字符串来标识客户端,并且在响应中返回Set-Cookie:为对应的值,当然也可以通过一定的encode或加密,只要能标识该客户端与服务器上记录的id对应就OK。

php中session在服务器上默认是保存在文件中的,而且上下文中session就是在应用初始的过程中从文件中读取出来,然后设置$_SESSION等全局变量,应用执行完毕后在把session的内容写入文件。

所以,我们梳理一下session的整个流程:

1、session配置。session也是以php扩展的形式加载的。
2、session_start(),开启session,会做一系列初始化的工作。
3、从cookie或参数中获取session id。
4、服务端打开session_id对应的存储文件,如果session_id对应的文件不存在,则生成新的session_id。
5、注册$_SESSION等全局变量。
6、读取session对应的内容,写入到上面注册的全局变量。
7、业务逻辑——读取session值或修改session的值。
8、应用结束的时候把session的值再重写写会存储文件。
9、如果是新生成的session_id,需要在响应中返回Set-Cookie.

“php中session的相关知识”的3个回复

  1. 其中kohana框架中的session模块用php来实现了session的机制,所以session的save_handle不需要再修改php的配置了,直接在应用程序中完成。

发表评论

电子邮件地址不会被公开。 必填项已用*标注