Set up each site separately:
<?php $cfgsession['file'] = "../sessions_global.txt"; $cfgsession['keepalive'] = 7200; ?>
To make multiple site sharing sessions, let them use the same $cfgsession['file'] . Turn on the session from one site in the request to another domain (possibly according to Jackβs recommendation) and until you catch them by making their request in a different browser or whatever (please something to prevent the session from being captured), let them set the session with $ _GET. For example:
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);
And then just collapse your own session_ functions:
<?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']; } ?>
dogglebones
source share