Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penyelesaian kepada masalah merentas domain Sesi PHP

Penyelesaian kepada masalah merentas domain Sesi PHP

PHPz
PHPzasal
2023-10-12 15:00:251280semak imbas

PHP Session 跨域问题的解决方法

Penyelesaian kepada masalah merentas domain Sesi PHP

Dalam pembangunan pemisahan bahagian hadapan dan belakang, 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. Gunakan kuki untuk berkongsi sesi merentas domain

Penyelesaian yang paling biasa ialah menggunakan kuki untuk berkongsi sesi merentas domain. Memandangkan kuki tidak dihadkan oleh dasar asal yang sama, maklumat sesi boleh dipindahkan dan dikongsi antara nama domain yang berbeza.

Langkah khusus adalah seperti berikut:

  1. Tetapkan sesi pada bahagian pelayan, seperti:
session_start();
$_SESSION['user'] = 'example';
  1. Simpan maklumat pengenalan sesi dalam kuki, seperti:
setcookie(session_name(), session_id(), time() + 60*60*24*30, '/', 'www.example.com', false, true);

>Antaranya, ialah nama domain pelayan semasa dan perlu diubah suai mengikut situasi sebenar. www.example.com 是当前服务端的域名,需要根据实际情况进行修改。

  1. 在跨域请求的客户端,发送带有 cookie 的请求,如:
fetch('http://www.example.com/api', {
  credentials: 'include',
})

其中,credentials: 'include'

    Dalam klien permintaan silang domain, hantar permintaan dengan kuki, seperti:
    1. session_id($_COOKIE[session_name()]);
      session_start();
      if(isset($_SESSION['user'])){
          // session 跨域共享成功
      }else{
          // session 跨域共享失败
      }
    2. Antaranya, kelayakan: 'include' digunakan untuk memaklumkan pelayar Hantar bukti kelayakan termasuk kuki ke pelayan.

    Pelayan menghuraikan kuki dan menetapkan semula sesi, seperti:

    $token = bin2hex(random_bytes(16));
    // 将 token 存储到数据库中
    // 返回 token 给客户端
      2. Gunakan token untuk berkongsi sesi merentas domain
    1. Penyelesaian lain ialah menggunakan token untuk mencapai perkongsian sesi merentas domain. Langkah-langkah khusus adalah seperti berikut:
    1. Apabila log masuk, jana token dan simpan dalam pangkalan data, dikaitkan dengan pengguna, seperti:
    2. rrreee
    3. Simpan token dalam localStorage tempatan atau sessionStorage di sisi pelanggan .
    Apabila membuat permintaan merentas domain, hantar token ke pelayan sebagai parameter atau dalam pengepala permintaan.

    Pelayan menghuraikan token, mengesahkan kesahihan token dengan menanyakan pangkalan data dan melaksanakan tetapan dan pengurusan sesi yang sepadan.

    Perlu diingatkan bahawa untuk memastikan keselamatan, token perlu mempunyai tempoh sah dan diperbaharui dalam tempoh masa tertentu. Di bahagian pelayan, token yang telah tamat tempoh perlu dibersihkan dengan kerap.

    🎜Ringkasan: 🎜🎜Di atas adalah dua kaedah biasa untuk menyelesaikan masalah silang domain Sesi PHP Anda boleh memilih penyelesaian yang sesuai mengikut situasi sebenar anda. Sama ada kuki atau token digunakan, pemprosesan yang sepadan perlu dilakukan pada bahagian pelayan untuk mencapai perkongsian sesi merentas domain. Pada masa yang sama, untuk memastikan keselamatan, kami juga perlu mengambil beberapa langkah untuk melindungi keselamatan data sesi. 🎜

Atas ialah kandungan terperinci Penyelesaian kepada masalah merentas domain Sesi PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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