Fikker首页 -> 帮助系统 -> 会话缓存

1、特别说明:   

A、本【会话缓存】属于高级功能选项,只有充分了解【会话缓存】的设计原理,才可使用。
B、在 Fikker 系统中,登录用户与游客用户就是通过这个【会话缓存】配置来区分的。
C、在【页面缓存】中,登录用户只能访问会员缓存+公共缓存的页面,游客用户只能访问游客缓存+公共缓存的页面。
D、Fikker 帮助系统提供了 Discux X2/2.5/3.0 关于会话缓存具体应用的案例,请参看 <关于 Discuz X2/2.5/3.0 会话缓存设置> 。

2、配置说明:    

登录验证地址
一般为会员登录验证地址URL,浏览器通过这个地址URL提交用户名和密码。支持多种匹配模式。

会话ID变量名
A、登录成功后,源站通过 HTTP 头向浏览器传递的会话ID变量名。支持通配符匹配,例如 Discuz X2/2.5 系统设定的会话ID为:????_????_auth 。
B、Fikker 将缓存 HTTP -> Set-Cookie -> SessionID 等相关变量名/变量值及其属性,用于区分会员用户或游客用户。具体参看下面 <设计背景及原理> 。

缓存周期
会话ID的缓存周期,过期将被清理。

3、设计背景及原理:    

SNS/BBS/Discuz/B2C 等网站,登录用户(会员)和非登录用户(游客)在访问相同的链接地址 URL 时,看到的页面内容可能是不同的,因为部分页面中包含的内容只有用户登陆后或具备一定的权限后才能查看和下载。设想一下,Fikker 如果能够区分会员和游客,就能够分别缓存会员页面和游客页面,分别起到缓存加速的作用。【会话缓存】设计的目的就是用来区分会员和游客的。

那么 Fikker 是怎么判断一个用户为已登录用户(会员)的呢?
用户登录成功后,源站会生成并保存一个会话(Session),并且会向浏览器传递一个会话ID(Session ID),这个会话ID是通过 HTTP 头的 Set-Cookie 字段来传递的(例如:ASP.NET_SessionId,JSPSESSIONID 等变量名)来传递的,浏览器会一直保存这个会话ID(Session ID)直至浏览器被完全关闭或超时。登陆成功后,当会员用户访问源站的任何页面时,浏览器都会通过 HTTP 的 Cookie 字段来提交这个会话 ID 给源站验证。整个过程使用 HTTP 协议说明如下:

a、用户登录时,会通过如下“登录验证地址”提交用户名和密码:

POST http://www.fikker.com/login.php?action=login HTTP/1.1
Connection: keep-alive
Content-Length: 31

username=fikker&password=tttdd

b、登录成功后,Fikker 将会缓存 HTTP -> Set-Cookie -> FikkerSessionID 字段的相关信息:

HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Content-Length: 87867
Set-Cookie: FikkerSessionID=UpIskU75w721493BD8hW8HvD4Kn; path=/; domain=.fikker.com

Fikker 缓存的会话ID变量名为: FikkerSessionID,变量值为: UpIskU75w721493BD8hW8HvD4Kn,有效路径为: / ,域名作用范围为: *.fikker.com

c、登陆后,会员通过浏览器访问源站的任何页面时,浏览器都会提交 HTTP -> Cookie -> FikkerSessionID 字段给源站:

GET http://www.fikker.com/detail.htm HTTP/1.1
Connection: keep-alive
Cookie: FikkerSessionID=UpIskU75w721493BD8hW8HvD4Kn

d、以上过程,对应的【会话缓存】实现:

Fikker图片