PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php – 安全灵活的跨域会话大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,希望你能帮忙.假设我为一家名为“BlAMMo”的假想公司工作,我们有一个名为“Log”的假设产品.我正在尝试建立一个系统,有人可以登录到logfromblAMMo.com并订购我们的一些产品,然后当他们准备购买时,请到checkout.blAMMo.com支付他们的订单.最终我想允许BlAMMo在其自己的网站上推出一个新的假设产品:rockfromblAMMo.com,并且该网站还能够与checkout.blAMMo.com共享会话,以便用户可以在这两个产品上拥有一个购物车网站.

当然,上面描述的假设情景并不是我公司的实际运作方式,但它是我需要做一个公平的例子.我们有一个现有的用户数据库,我们有办法对我们任何网站上的任何用户进行身份验证,但我的目标是允许用户无需重新进行身份验证即可从一个站点无缝跨越到另一个站点.这也允许我们将诸如购物车之类的数据无缝地传输到结账站点.

我(简要地)看过OpenID这样的解决方案,但是我需要能够将我们现有的任何解决方案与现有的身份验证方法集成在一起,这种方法并不十分强大.有没有什么好方法可以通过PHP单独做到这一点?

您可以做的是在站点之间创建“交叉”链接以进行会话.

最简单的方法是通过查询字符串传递会话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]);
}

每次越过边界时都需要这些链接,因为会话可能自上次重新生成.

大佬总结

以上是大佬教程为你收集整理的php – 安全灵活的跨域会话全部内容,希望文章能够帮你解决php – 安全灵活的跨域会话所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。