Rumah pembangunan bahagian belakang tutorial php 实现多域名下共用一个SESSION

实现多域名下共用一个SESSION

Nov 24, 2016 am 09:13 AM
php

要实现多域名共享session,首先就得了解SESSION的运行机制。基本概念我就不说了。
session是这样运行的:
用户A访问站点Y,如果站点Y执行了session_start();(以下假定session_start()总是存在)那么会产生一个 session_id,这个session id一般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置session.use_only_cookies为1,强制SESSION ID必须以COOKIE传递。)。这时候SESSION ID表现为$_COOKIE['PHPSESSID'];(PHPSESSID可用session_name()函数来修改)
用户A接着访问,这个session id($_COOKIE['PHPSESSID'])就会在A每次访问Y的时候传送到站点Y。
在站点Y上,会有这么一个目录,是用来保存SESSION的实际数据的。站点Y接收到session id,然后通过session id,来获得与SESSION数据的关联,并返回SESSION数据。

可能聪明的你已经想到了,既然服务器端和客户端之间的SESSION是通过一个SESSION ID来联系,并且SESSION数据是以普通文件的形式保存在一个特定的文件夹里。
那么我们要实现不同域名,只需要满足以下两个条件:

1)不同域名的SESSION数据目录统一到一起,或者同步更新。

2)对同一个客户,使用统一的一个SESSION ID

第一个条件的实现。
如果是同一台服务器,就不需要进行任何设置了。
如果是集群/分布式的,那么我想也不需要我来说了。。能做分布式应用的,在目录共享方面的经验应该比我丰富。我也没有进行过多服务器的测试,主客观条件的原因都有。

我在这里主要是想说一下第二个条件——使不同的域名,拥有统一的SESSION ID。
那我们应该怎么统一呢?
首先必须在不同域名之间传递这个SESSION ID,且由于 cookie必须是针对域名的,所以传递动作是由客户端来完成。如果传递过程不是由客户端来完成,那么接受传递的域名就不知道针对的是哪个客户。

其次就是修改接受传递的域名下的SESSION ID。

如何传递:
HTML里,我们可以使用很多种方法。例如
iframe

或者.js

或者是一个img html元素

只要能调用某个地址,就行。

在wml里,由于wml script的特点,我们无法使用script这样的形式来调用,而wml里也没iframe..但是我们还是可以通过img来实现传递的。

如何修改:
既然SESSION ID一般情况下是通过COOKIE来传递,那么我们只需要通过传递$_COOKIE['PHPSESSID'];即可。但是如果PHPSESSID被session_name改变了,我们又得修改setcookie中的PHPSESSID..这样就会变得很麻烦。。所以我们可以选择一个session特有的函数session_id来修改$_COOKIE['PHPSESSID'];

需要注意的几点:

如果session.use_only_cookies为0(PHP默认),那么session id有可能会以url或其他形式传递

session_id()和session_name必须在session_start()前使用

以下是我写的一个简单的实现多域名的类。如果上面的看不太明白,可以看看我的这个多域名类。这个类是在HTML下以iframe形式实现的。

 

/*

使用:
服务器A,服务器B,在A的index.php登陆,在B里建立一个接收SESSION的文件,例如ses_get.php
A的index.php做如下修改
最开始加上session_start();
里,任意一个地方写上:mdSession::_set('B/ses_get.php')
而ses_get.php则在开头写上mdSession::_get();
@作者:surfchen@gmail.com http://www.surfchen.org/ */
function mdSession()
{

} function set($urls)
{ if (!is_array($urls))
{ $urls=array($urls); } foreach ($urls as $value)
{ echo ''; } return true; } function get()
{ session_id($_SERVER['QUERY_STRING']); session_start(); return true; } function _set($urls)
{ $obj=new mdSession(); return $obj->set($urls); } function _get()
{ $obj=new mdSession(); return $obj->get(); }
}?>

 

index.php :

include "mdSession.php";

session_start();

$_SESSION['php']="yogurt8";

mdSession::_set('http://www.b.com/ses_get.php');

var_dump($_SESSION);

?>

 

ses_get.php

include "mdSession.php";

mdSession::_get();

?>

 

b.php :

 

session_start();

var_dump($_SESSION);

 

先访问 http://www.a.com/a.php 然后在 http://www.b.com/b.php 看效果

 

在firefox 与谷歌浏览器是没问题,但在 Ie 下还是不行


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Panduan Ringkas CakePHP Panduan Ringkas CakePHP Sep 10, 2024 pm 05:27 PM

CakePHP ialah rangka kerja MVC sumber terbuka. Ia menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP mempunyai beberapa perpustakaan untuk mengurangkan beban tugas yang paling biasa.

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

See all articles