如何在PHP中利用会话实现跨子域

  介绍

本篇文章为大家展示了如何在PHP中利用会话实现跨子域,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>会话主要分两部分:

一个是会话数据,该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在。

另一个是标志着会话数据的<代码>会话Id,会话Id> 会话Id> 会话Id> 会话Id> 会话Id 和<代码>会话生存期>

两个不同的域名网站,想用同一个会话,就是牵扯到会话跨域问题!

默认情况下,各个服务器会各自分别对同一个客户端产生<代码> SESSIONID> 会话Id>

一个是各个服务器对同一个客户端产生的<代码>会话Id> PHPSESSID>

另一个是会话数据的存储方式/位置必须保证各个服务器都能够访问到。这两个目标简单地说就是多服务器(A、B服务器)共享客户端的<代码>会话Id>

<强>有三种解决方法:

<强> 1。只要在PHP页面的最开始(要在任何输出之前,并且在session_start()之前)的地方进行以下设置

报错(& # 39;session.cookie_path& # 39;,, & # 39;/& # 39;);   报错(& # 39;session.cookie_domain& # 39;,, & # 39; .mydomain.com& # 39;);   报错(& # 39;session.cookie_lifetime& # 39;,, & # 39; 1800 & # 39;);

<强> 2。在php。ini里设置

session.cookie_path =/session.cookie_domain =.mydomain.com   session.cookie_lifetime  1800年=,

<强> 3。在php页面最开始的地方(条件同1)调用函数

session_set_cookie_params (1800,,, & # 39;/& # 39;,, & # 39; .mydomain.com& # 39;);

<强>会话有个<代码> Session_id>

要实现会话子域,实际上是在同一个浏览器中在访问两个A和B子域时,其会话是相同的。

由于会话都是保存在服务器端,如何让两台服务器识别这两个请求是由一个浏览器发出的呢?

饼干是保存在客户端的,服务器通常通过饼干来识别不同的客户端,因此,可以使用饼干来保存<代码> Session_id>

例如,当访问a.sso.com时,就将<代码> Session_id 保存在Cookie中。当访问b.sso.com时,则将<代码> Session_id>

并通过session_id去某个持久化容器中获取会话。

例如,当访问a.sso.com时,就将<代码> session_id 保存在Cookie中。当访问b.sso.com时,则将<代码> session_id>

并通过<代码> session_id>

在本实验中,使用PHP来作为实验语言。

当访问a.sso.com时,则将通过
,

session_start ();   美元,_SESSION[& # 39;简历及# 39;],=,“SBSBSBS";   ,session_id 美元;=,session_id ();   ,setcookie(& # 39;名字# 39;,session_id美元,时间()+ 3600 * 24日& # 39;/& # 39;,& # 39;SSO.com& # 39;);

<强>,将session_id保存在cookie中。

由于在PHP中,会话是一个数组,PHP有<代码>序列化()函数,将数组序列化

session_value 美元;=,序列化($ _SESSION);

然后将session_value美元<代码> 保存在数据库中。

在访问b.sso.com时,则从cookie中获取到<代码> session_id> session_id>

接着就可以对该会话进行操作,实现会话跨子域。

由于将会话保存在数据库中,存取都是比较费时的操作,因此可以将会话保存在缓存中,例如

如何在PHP中利用会话实现跨子域