跨域共享会话
Shared Session Across Domains
好的..我有两个域 example.com 和 example.net,它们共享相同的代码 space 和会话。问题是当用户更改语言时域应该更改,当发生这种情况时所有会话数据都将丢失。我想在此之前进行 ajax 调用,以便我可以更改会话。
这是用于初始化会话的代码。
<?php
/* This method is invoked */
public function start($session_id = '', $key = 'default') {
if (!session_id()) {
ini_set('session.use_only_cookies', 'Off');
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');
ini_set('session.cookie_httponly', 'On');
if ($session_id) {
session_id($session_id);
}
if (isset($_COOKIE[session_name()]) && !preg_match('/^[a-zA-Z0-9,\-]{22,52}$/', $_COOKIE[session_name()])) {
exit('Error: Invalid session ID!');
}
session_set_cookie_params(0, '/');
session_start();
}
if (!isset($_SESSION[$key])) {
$_SESSION[$key] = array();
}
$this->data =& $_SESSION[$key];
return true;
}
我尝试创建一个独立的脚本来处理 ajax 调用,但没有成功。
<?php
ini_set('session.use_only_cookies', 'Off');
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');
ini_set('session.cookie_httponly', 'On');
session_set_cookie_params(0, '/');
session_start();
session_id($_POST['session_id']);
header('Content-Type: application/json');
$data = array('session_id' => session_id());
echo json_encode($data);
在两个域之间切换时不会保留会话。
有什么线索吗?
这是 Web 浏览器的一项安全功能 - 会话使用附加到域的 cookie,浏览器不会将此 cookie 发送到另一个域。
当您控制这两个域时,您可以通过在 URL 中包含身份验证信息来实现此目的。这是一个复杂的话题。您可以自制一些可行的东西,但如果您不熟悉安全问题,最好使用现成的单点登录解决方案。
好的..我有两个域 example.com 和 example.net,它们共享相同的代码 space 和会话。问题是当用户更改语言时域应该更改,当发生这种情况时所有会话数据都将丢失。我想在此之前进行 ajax 调用,以便我可以更改会话。 这是用于初始化会话的代码。
<?php
/* This method is invoked */
public function start($session_id = '', $key = 'default') {
if (!session_id()) {
ini_set('session.use_only_cookies', 'Off');
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');
ini_set('session.cookie_httponly', 'On');
if ($session_id) {
session_id($session_id);
}
if (isset($_COOKIE[session_name()]) && !preg_match('/^[a-zA-Z0-9,\-]{22,52}$/', $_COOKIE[session_name()])) {
exit('Error: Invalid session ID!');
}
session_set_cookie_params(0, '/');
session_start();
}
if (!isset($_SESSION[$key])) {
$_SESSION[$key] = array();
}
$this->data =& $_SESSION[$key];
return true;
}
我尝试创建一个独立的脚本来处理 ajax 调用,但没有成功。
<?php
ini_set('session.use_only_cookies', 'Off');
ini_set('session.use_cookies', 'On');
ini_set('session.use_trans_sid', 'Off');
ini_set('session.cookie_httponly', 'On');
session_set_cookie_params(0, '/');
session_start();
session_id($_POST['session_id']);
header('Content-Type: application/json');
$data = array('session_id' => session_id());
echo json_encode($data);
在两个域之间切换时不会保留会话。 有什么线索吗?
这是 Web 浏览器的一项安全功能 - 会话使用附加到域的 cookie,浏览器不会将此 cookie 发送到另一个域。
当您控制这两个域时,您可以通过在 URL 中包含身份验证信息来实现此目的。这是一个复杂的话题。您可以自制一些可行的东西,但如果您不熟悉安全问题,最好使用现成的单点登录解决方案。