1.什么是session?
先来看看维基百科对session的解释:http://zh.wikipedia.org/wiki/%E4%BC%9A%E8%AF%9D_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%9
在计算机科学领域来说,尤其是在网络领域,会话(session)是一种持久网络协议,在用户(或用户代理)端和服务器端之间创建关联,从而起到交换数据包的作用机制,session在网络协议(例如telnet或FTP)中是非常重要的部分。
在不包含会话层(例如UDP)或者是无法长时间驻留会话层(例如HTTP)的传输协议中,会话的维持需要依靠在传输数据中的高级别程序。例如,在浏览器和远程主机之间的HTTP传输中,HTTP cookie就会被用来包含一些相关的信息,例如session ID,参数和权限信息等。
后面还有一小段:
在动态页面完成解析的时候,储存在会话中的变量会被压缩后传输给客户端的Cookie。此时完全依靠客户端的文件系统来保存这些数据(或者内存)。
在每一个成功的请求中,Cookie中都保存有服务器端用户所具有的身份证明(PHP中的session id)或者更为完整的数据。
虽然这样的机制可以保存数据的前后关联,但是必须要保障数据的完整性和安全性。
PHP.net将session称为“会话支持”,是这样解释的:
会话支持在 PHP 中是在并发访问时由一个方法来保存某些数据.从而使你能够构建更多的定制程序 从而提高你的 web 网站的吸引力.
一个访问者访问你的 web 网站将被分配一个唯一的 id, 就是所谓的会话 id. 这个 id 可以存储在用户端的一个 cookie 中,也可以通过 URL 进行传递.
会话支持允许你将请求中的数据保存在超全局数组$_SESSION中. 当一个访问者访问你的网站,PHP 将自动检查(如果 session.auto_start 被设置为 1)或者在你要求下检查(明确通过 session_start() 或者隐式通过 session_register()) 当前会话 id 是否是先前发送的请求创建. 如果是这种情况, 那么先前保存的环境将被重建.
总之,session可以让你的程序更安全、更高效。可惜的是,Wordpress核心并不支持session。下面这个示意图是不支持session的wordpress的在被已登录用户访问时的情况:
很容易理解,是吧?
基本上,每次加载页面 – 或在每次用户定位到新页面 – 程序都要从数据库中查询必要的信息,然后将其呈现给用户。
这可能也是Wordpress相对于支持session的CMS核心来说比较浪费服务器资源的原因之一。
那么,如果程序是支持session的呢?
假如程序支持session,我们设置为:
不为没登录的访客设置session;
为登录的用户设置session;
用户退出时销毁session。
那会是怎么样呢?看下面的示意图:
简而言之:一旦用户登录,session会将某些信息存储进一个全局数组,以减轻数据库的负担。
2.Wordpress是否支持session?
WordPress核心不支持session,它支持cookie。
3.如何让Wordpress支持session?
上面简要介绍了session是什么以及其用途,并且说明了Wordpress核心不支持session,现在的问题就是:如何让Wordpress支持session了:
不多废话了,直接去下载Peter Wooster的插件Simple Session Support 吧,里面写的很简单,但是的确可用,并且可以供你写主题或插件时使用,但是别忘了给人家保留署名权。
来源:
https://www.wpdaxue.com/wordpress-session-support.html