Rumah pembangunan bahagian belakang tutorial php 如何解决Yii2下session跨域名共存的问题

如何解决Yii2下session跨域名共存的问题

Jun 15, 2018 am 10:26 AM
session yii2 Domain silang

这篇文章主要介绍了Yii2下session跨域名共存的解决方案,内容挺不错的,现在分享给大家,也给大家做个参考。

前面谈过session相关配置,在开发的时候,常需要跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态。两种情况:一种9streets.cn和a.9streets.cn之间,另一种是a.com b.com之间,这几天总结了一下处理方法。

无论是一二级域名,和不同域名下的跨域,无非要达到两点:

  • 客户端访问同一个sessionId,

  • 所有域名对应的服务器访问的session的数据的位置必须一致。

1.访问共同的sessionId主要是通过把当前的sessionId写进cookie里面

cookie在不同域名下是不能访问的,我们需要在访问在后台设置用户在登录的时候,把需要共用的登录信息的域名,如果是在1,2级域名下,直接把cookie设置为所属主域名,例如:

setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".a.com");
Salin selepas log masuk

也许你会问:如果是在不同的域名呢?采用P3P技术简单解决,实现原理,在访问网站x.com的时候,y.com程序触发y.com文件的写入sessionid值,sessionid值便可以获取,然后把seesion值存入数据库,取相同的sessionid值便可。这就要求y.com里面的程序文件必需能跨域访问,默认情况下,浏览器是不能跨域设置cookie的,加上p3p头后才行。在对应php文件加上:header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

2.session数据存储位置一致的实现方法

session该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在,而非存储在服务器的内存中,在这里我们得修改为所有域下都能访问的方式。网上介绍了数据库存储,文件形式存储,内存存储, 如果用数据库存储session数据,网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行操作,效率就会明显降低,可以考虑存在内存服务器来实现,下面的session.rar里面介绍的是数据库存session的实例。

在yii2下 处理这中问题,根据网上搜到的教程 终配置成功教程如下:

在frontend的config文件夹中main.php中配置

$host = explode('.', $_SERVER["HTTP_HOST"]);
if (count($host) > 2) {
  define('DOMAIN', $host[1] . '.' . $host[2]);
} else {
  define('DOMAIN', $host[0] . '.' . $host[1]);
}
define('DOMAIN_HOME', 'www.' . DOMAIN);
define('DOMAIN_USER_CENTER', 'man.' . DOMAIN);
define('DOMAIN_API', 'api.' . DOMAIN);
define('DOMAIN_EMAIL', 'mail.' . DOMAIN);
define('DOMAIN_LOGIN', 'login.' . DOMAIN);
define('DOMAIN_IMG', 'img.' . DOMAIN);
Salin selepas log masuk

然后配置User 和 Session:

'user' => [
  'enableAutoLogin' => true,
  'identityCookie' => ['name' => '_identity', 'httpOnly' => true, 'domain' => '.' . DOMAIN],
],
'session' => [
  'cookieParams' => ['domain' => '.' . DOMAIN, 'lifetime' => 0],
  'timeout' => 3600,
],
Salin selepas log masuk

这里在配置项的user和session里 我把domain写死了例如:'domain'=>'.baidu.com',这样就不用判断了.

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Yii框架中使用jquery的有关问题

Atas ialah kandungan terperinci 如何解决Yii2下session跨域名共存的问题. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
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)

Bagaimana untuk menetapkan tamat masa sesi dalam Sesi SpringBoot Bagaimana untuk menetapkan tamat masa sesi dalam Sesi SpringBoot May 15, 2023 pm 02:37 PM

Masalah ditemui dalam masa tamat masa pengeluaran projek springboot Masalahnya diterangkan di bawah: Dalam persekitaran ujian, sesi keluar telah dikonfigurasikan dengan menukar aplikasi.yaml Selepas menetapkan masa yang berbeza untuk mengesahkan bahawa konfigurasi keluar sesi berkuat kuasa, masa tamat tempoh ditetapkan terus kepada 8 jam untuk dilepaskan. Walau bagaimanapun, saya menerima maklum balas daripada pelanggan pada waktu tengah hari bahawa masa tamat projek ditetapkan menjadi singkat Jika tiada operasi dilakukan selama setengah jam, sesi akan tamat tempoh dan memerlukan log masuk berulang. Selesaikan masalah pengendalian persekitaran pembangunan: projek springboot mempunyai Tomcat terbina dalam, jadi sesi keluar yang dikonfigurasikan dalam application.yaml dalam projek adalah berkesan. Persekitaran pengeluaran: Keluaran persekitaran pengeluaran ialah

Bagaimana untuk menyelesaikan kegagalan sesi Bagaimana untuk menyelesaikan kegagalan sesi Oct 18, 2023 pm 05:19 PM

Kegagalan sesi biasanya disebabkan oleh tamat tempoh seumur hidup sesi atau penutupan pelayan. Penyelesaian: 1. Memanjangkan hayat sesi; 2. Gunakan storan berterusan;

Penyelesaian kepada masalah merentas domain Sesi PHP Penyelesaian kepada masalah merentas domain Sesi PHP Oct 12, 2023 pm 03:00 PM

Penyelesaian kepada masalah silang domain PHPSession Dalam pembangunan pemisahan front-end dan back-end, permintaan merentas domain telah menjadi kebiasaan. Apabila menangani isu merentas domain, kami biasanya melibatkan penggunaan dan pengurusan sesi. Walau bagaimanapun, disebabkan oleh sekatan dasar asal penyemak imbas, sesi tidak boleh dikongsi secara lalai merentas domain. Untuk menyelesaikan masalah ini, kita perlu menggunakan beberapa teknik dan kaedah untuk mencapai perkongsian sesi merentas domain. 1. Penggunaan kuki yang paling biasa untuk berkongsi sesi merentas domain

Apakah yang perlu saya lakukan jika sesi php hilang selepas menyegarkan? Apakah yang perlu saya lakukan jika sesi php hilang selepas menyegarkan? Jan 18, 2023 pm 01:39 PM

Penyelesaian kepada masalah bahawa sesi php hilang selepas menyegarkan: 1. Buka sesi melalui "session_start();" 2. Tulis semua konfigurasi awam dalam fail php 3. Nama pembolehubah tidak boleh sama dengan subskrip tatasusunan; 4. Dalam Hanya semak laluan penyimpanan data sesi dalam phpinfo dan semak sama ada sesio dalam direktori fail berjaya disimpan.

Cara membaca dan menulis data Sesi dengan betul dalam berbilang fail dengan PHP Cara membaca dan menulis data Sesi dengan betul dalam berbilang fail dengan PHP Mar 23, 2023 am 11:12 AM

Apabila anda menggunakan sesi PHP (Sesi), kadangkala anda akan mendapati bahawa Sesi boleh dibaca secara normal dalam satu fail, tetapi tidak boleh dibaca dalam fail lain. Ini mungkin mengelirukan anda kerana data sesi sepatutnya dikongsi di seluruh aplikasi. Artikel ini akan menerangkan cara membaca dan menulis data sesi PHP dengan betul dalam berbilang fail.

Bagaimana untuk melaksanakan log masuk SMS dalam aplikasi sesi kongsi Redis Bagaimana untuk melaksanakan log masuk SMS dalam aplikasi sesi kongsi Redis Jun 03, 2023 pm 03:11 PM

1. Melaksanakan log masuk SMS berdasarkan sesi 1.1 Carta alir log masuk SMS 1.2 Melaksanakan penghantaran kod pengesahan SMS Perihalan permintaan hujung hadapan: Penerangan kaedah permintaan POST laluan permintaan/pengguna/kod parameter permintaan telefon (nombor telefon) nilai pulangan Tiada antara muka belakang pelaksanaan: @Slf4j@ ServicepublicclassUserServiceImplextendsServiceImplimplementsIUserService{@OverridepublicResultsendCode(Stringphone,HttpSessionsession){/1

Bagaimana untuk menyelesaikan masalah bahawa tetapan tamat masa sesi Springboot2 adalah tidak sah Bagaimana untuk menyelesaikan masalah bahawa tetapan tamat masa sesi Springboot2 adalah tidak sah May 22, 2023 pm 01:49 PM

Masalah: Hari ini, kami menghadapi masalah tamat masa tetapan dalam projek kami dan perubahan pada application.properties SpringBoot2 tidak pernah berkuat kuasa. Penyelesaian: Pelayan.* sifat digunakan untuk mengawal bekas terbenam yang digunakan oleh SpringBoot. SpringBoot akan mencipta contoh bekas servlet menggunakan salah satu contoh ServletWebServerFactory. Kelas ini menggunakan sifat pelayan.* untuk mengkonfigurasi bekas servlet terkawal (tomcat, jeti, dsb.). Apabila aplikasi digunakan sebagai fail perang kepada contoh Tomcat, pelayan.* sifat tidak digunakan. Mereka tidak memohon,

Bagaimana untuk membuat permintaan merentas domain dalam Vue? Bagaimana untuk membuat permintaan merentas domain dalam Vue? Jun 10, 2023 pm 10:30 PM

Vue ialah rangka kerja JavaScript yang popular untuk membina aplikasi web moden. Apabila membangunkan aplikasi menggunakan Vue, anda sering perlu berinteraksi dengan API yang berbeza, yang selalunya terletak pada pelayan yang berbeza. Disebabkan oleh sekatan dasar keselamatan merentas domain, apabila aplikasi Vue berjalan pada satu nama domain, ia tidak boleh berkomunikasi secara langsung dengan API pada nama domain lain. Artikel ini akan memperkenalkan beberapa kaedah untuk membuat permintaan merentas domain dalam Vue. 1. Gunakan proksi Penyelesaian merentas domain biasa ialah menggunakan proksi

See all articles