您可以做的是在站点之间创建“交叉”链接以进行会话.
最简单的方法是通过查询字符串传递会话ID;例如
http://whateverblammo.com/?sessid=XXYYZZ
在您开始认为任何人都可以捕获该信息之前,请考虑一下您的cookie是如何传输的;假设您没有使用SSL,那么点击网络的人没有太大区别.
这并不意味着它是安全的;例如,用户可能会意外地复制/粘贴地址栏,从而泄露其会话.要限制此曝光,您可以在收到后立即重定向到没有会话ID的页面.
请注意,在会话ID上使用mcrypt()将无济于事,因为它不是问题值的可见性;会话劫持并不关心底层值,只关注它的重现性.
你必须确保id只能使用一次;这可以通过创建一个跟踪使用计数的会话变量来完成:
$_SESSION['extids'] = array();
$ext = md5(uniqid(mt_rand(), true)); // just a semi random diddy
$_SESSION['extids'][$ext] = 1;
$link = 'http://othersite/?' . http_build_query('sessid' => session_id() . '-' . $ext);
收到时:
list($sid, $ext) = explode('-', $_GET['sessid']);
session_id($sid);
session_start();
if (isset($_SESSION['extids'][$ext])) {
// okay, make sure it can't be used again
unset($_SESSION['extids'][$ext]);
}
每次越过边界时都需要这些链接,因为会话可能自上次重新生成.