Konfigurieren Sie jede Website individuell:
<?php
$cfgsession['file'] = "../sessions_global.txt";
$cfgsession['keepalive'] = 7200;
?>
Um mehrere Websites teilen Sitzungen zu machen, lassen Sie ihnen die gleiche $cfgsession['file']
verwenden. Fügen Sie eine Sitzung von einer Site in eine Anfrage zu einer anderen Domain ein (vielleicht wie von Jack empfohlen), und solange Sie sie nicht in einem anderen Browser abfangen (bitte tun Sie etwas Session-Hijacking zu hemmen) Lassen Sie sie eine Sitzung mit $ _GET angeben. Zum Beispiel:
include ("../session.php");
if (isset($_COOKIE['session'])) session_begin($_COOKIE['session'], $_SERVER['HTTP_USER_AGENT'] . "+" . $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['REMOTE_ADDR']);
else session_begin("", $_SERVER['HTTP_USER_AGENT'] . "+" . $_SERVER['HTTP_ACCEPT_CHARSET'], $_SERVER['REMOTE_ADDR']);
setcookie("session", session_identity(), 0);
Und dann nur Ihre eigenen SESSION_ Funktionen rollen:
<?php
function session_begin($mysession = "", $key = "", $client = "") {
global $cfgsession;
if (!preg_match("/^[a-z0-9]{32}$/i", $mysession)) $mysession = md5(microtime());
$error = false;
$client = trim($client);
$key = trim($key);
$cfgsession['returning'] = false;
if ($chandle = @tmpfile()) {
if ($shandle = @fopen($cfgsession['file'], "rb")) {
flock($shandle, LOCK_SH);
fputs($chandle, $mysession . " " . time() . " $" . $client . " $" . $key . "\n");
while (!feof($shandle)) {
$sline = explode(" ", trim(fgets($shandle)), 4);
if ($sline[1] >= (time() - $cfgsession['keepalive'])) {
if (($sline[0] == $mysession) && ($sline[3] == "$" . $key)) {
$cfgsession['client'] = substr($sline[2], 1);
$cfgsession['returning'] = true;
} elseif (count($sline) > 2) fputs($chandle, implode(" ", $sline) . "\n");
}
}
fclose($shandle);
fseek($chandle, 0);
if ($shandle = @fopen($cfgsession['file'], "cb")) {
if (flock($shandle, LOCK_EX)) {
ftruncate($shandle, 0);
$cfgsession['count'] = 0;
while (!feof($chandle)) {
$cline = trim(fgets($chandle));
fputs($shandle, $cline . "\n");
$cfgsession['count']++;
}
} else $error = true;
fclose($shandle);
} else $error = true;
} else $error = true;
fclose($chandle);
} else $error = true;
if (($cfgsession['returning'] == false) && ($mysession == $cfgsession['session'])) {
$cfgsession['returning'] = true;
$mysession = md5(microtime());
}
$cfgsession['session'] = $mysession;
if ($error) return -1;
else return 0;
}
function session_count() {
global $cfgsession;
return $cfgsession['count'];
}
function session_client() {
global $cfgsession;
return $cfgsession['client'];
}
function session_id() {
global $cfgsession;
return $cfgsession['session'];
}
function session_index() {
global $cfgsession;
$index_return = array();
if ($uhandle = @fopen($cfgsession['file'], "rb")) {
flock($uhandle, LOCK_SH);
while (!feof($uhandle)) {
$uline = explode(" ", trim(fgets($uhandle)), 4);
foreach ($uline as &$value) {
if ($value[0] == "$") $value = substr($value, 1);
}
if (count($uline) >= 2) $index_return[] = $uline;
}
fclose($uhandle);
}
return $index_return;
}
function session_returning() {
global $cfgsession;
return $cfgsession['returning'];
}
?>
Warum lassen Sie PHP nicht die Sitzungs-ID für Sie generieren? Sie können Sitzungs-IDs über mehrere Domänen hinweg teilen. Entweder handelt es sich um den Cookie * oder * um einen Abfrageparameter zu übergeben. – hakre
Der Abfrageparameter wird nicht bevorzugt, ist unsicher und nicht URL-freundlich. Soweit ich weiß, erlauben Sie Cookies nur die gleiche Domain (auch Subdomains) nicht Multidomains. –
Es ist nur ein Cookie, den du passierst. Und Sie können Cookies für Drittanbieter-Domains, so genannte Third-Party-Cookies, erstellen. Möglicherweise müssen Sie dazu auch die rechtliche Seite überprüfen (neben der technischen Seite, die gelöst wird). Btw alle technischen Details, über die Sie vielleicht erfahren möchten: [HTTP State Management Mechanismus RFC6265] (http://tools.ietf.org/html/rfc6265) – hakre