Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mekanisme pengesahan konsistensi data merentas domain Sesi PHP

Mekanisme pengesahan konsistensi data merentas domain Sesi PHP

PHPz
PHPzasal
2023-10-12 13:06:231328semak imbas

PHP Session 跨域的数据一致性验证机制

Mekanisme pengesahan konsistensi data merentas domain Sesi PHP

Dengan pembangunan Internet, akses merentas domain telah menjadi keperluan biasa dan apabila melakukan akses merentas domain, mengekalkan konsistensi data telah menjadi cabaran penting . PHP menyediakan mekanisme Sesi untuk mengekalkan konsistensi data antara permintaan yang berbeza, tetapi secara lalai, akses merentas domain kepada Sesi tidak boleh dilakukan. Artikel ini akan memperkenalkan mekanisme berasaskan Token untuk mencapai pengesahan ketekalan data Sesi PHP dalam akses merentas domain dengan menambahkan mekanisme pengesahan tersuai dan menyediakan contoh kod khusus.

1. Pengenalan kepada Mekanisme Sesi

Sesi ialah kaedah penyimpanan data yang dikekalkan di bahagian pelayan, yang boleh menyimpan data pengguna secara berterusan dan merealisasikan pemindahan data permintaan silang. Dalam PHP, Session menjana ID Sesi yang unik dan menyimpan data dalam fail atau pangkalan data di bahagian pelayan. Apabila pengguna melawat halaman lain, data sesi asal dipulihkan melalui ID Sesi.

2. Isu dengan akses merentas domain

Secara lalai, mekanisme Sesi PHP hanya boleh berkongsi data antara nama domain atau nama subdomain yang sama. Apabila akses merentas domain diperlukan antara nama domain yang berbeza, ID Sesi tidak boleh dikongsi antara permintaan, mengakibatkan ketidakupayaan untuk mendapatkan data sesi asal.

3. Mekanisme pengesahan ketekalan data berasaskan token

Untuk menyelesaikan masalah ketekalan data akses merentas domain Sesi, anda boleh menambah mekanisme Token untuk mengesahkan sama ada ID Sesi pengguna yang sama di bawah nama domain yang berbeza adalah sah . Langkah pelaksanaan khusus adalah seperti berikut:

  1. Apabila pengguna log masuk, simpan ID Sesi dan data berkaitan pengguna dalam pangkalan data, dan jana Token unik.
  2. Kembalikan Token kepada pengguna dan tetapkan pengecam akses merentas domain dalam kuki (seperti menetapkan domain sebagai nama domain utama dan bukannya nama subdomain yang sedang dilawati).
  3. Apabila pengguna membuat permintaan silang domain, Token diperoleh melalui pengenalan silang domain dalam kuki dan dihantar ke pelayan nama domain sasaran.
  4. Selepas menerima Token, pelayan nama domain sasaran membandingkannya dengan Token dalam pangkalan data.
  5. Jika token berjaya dipadankan, ID Sesi pengguna akan dikembalikan ke pelayan nama domain sasaran.
  6. Pelayan nama domain sasaran memperoleh data berkaitan pengguna melalui ID Sesi dan memprosesnya dengan sewajarnya.

4. Contoh Kod

Berikut ialah contoh kod mudah untuk menunjukkan mekanisme pengesahan ketekalan data berasaskan Token. Katakan terdapat dua nama domain: www.example.com dan app.example.com.

  1. Apabila pengguna log masuk, Token dijana dan disimpan dalam pangkalan data.
// Generate unique token
$token = uniqid();

// Store token along with user data in database
$db->query("INSERT INTO users (token, username) VALUES ('$token', '$username')");
  1. Selepas log masuk berjaya, Token akan dihantar semula kepada pengguna dan pengenalan merentas domain akan ditetapkan dalam Kuki.
setcookie('token', $token, time()+3600, '/', 'example.com', false, true);
  1. Dalam permintaan merentas domain, hantar Token dalam kuki ke pelayan nama domain sasaran.
// Retrieve token from cookie
var token = document.cookie.match('(^|;) ?token=([^;]*)(;|$)')[2];

// Make cross-domain request with token
fetch('https://app.example.com/api', {
    headers: {
        'Authorization': 'Bearer ' + token
    }
})
.then(response => response.json())
.then(data => {
    // Handle response data
})
.catch(error => {
    // Handle error
});
  1. Bandingkan pelayan nama domain sasaran dengan Token dalam pangkalan data.
// Retrieve token from request
$token = $_SERVER['HTTP_AUTHORIZATION'];

// Query token from database
$result = $db->query("SELECT * FROM users WHERE token = '$token'");

if ($result->num_rows > 0) {
    // Token is valid, retrieve session ID
    $session_id = session_id();
    // Perform operations with session data
} else {
    // Token is invalid, handle unauthorized access
}

5. Ringkasan

Dengan menambahkan mekanisme pengesahan berasaskan token, pengesahan ketekalan data Sesi PHP dalam akses merentas domain boleh dicapai. Walaupun mekanisme ini mempunyai kerumitan tertentu berbanding dengan berkongsi ID Sesi secara langsung, ia boleh menyelesaikan masalah konsistensi data dalam akses merentas domain dengan berkesan dan meningkatkan pengalaman pengguna dan keselamatan sistem.

Atas ialah kandungan terperinci Mekanisme pengesahan konsistensi data 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