程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了具有多个域和子域的PHP身份验证大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决具有多个域和子域的php身份验证?

开发过程中遇到具有多个域和子域的php身份验证的问题如何解决?下面主要结合日常开发的经验,给出你关于具有多个域和子域的php身份验证的解决方法建议,希望对你解决具有多个域和子域的php身份验证有所启发或帮助;

据我所知,跨子域之间的会话很好,但不会延续到整个新域。为此,您需要某种集中式数据方法或API。

您将必须创建一个远程MysqL数据访问权限,以便domain2.com可以访问domain1.com上的数据库。执行登录时,不仅应创建一个新会话,而且应将唯一的登录令牌(具有到期时间)放入MysqL数据库。现在,对于从domain1.com到domain2.com的每个链接,您都应该添加一个$ _GET变量,该变量包含一个随机生成的会话ID(md5哈希即可)。domain2.com接收到访问者后,将使用$ _GET变量,通过MysqL数据库运行该变量以找到登录令牌,如果匹配,则认为该用户已登录(也许将$ _cookie嵌入为以及存储登录数据)。这将使登录可在两个完全不同的域之间转移。

:您需要创建一个API方法,以便domain1.com可以响应来自授权域的外部请求,以在转发用户时检索登录令牌。此方法还要求从domain1.com到domain2.com的所有链接都必须附加$_GET变量,以传递唯一的会话哈希。然后,在接收到访问者之后,domain2.com将对domain1.com/userAPI.php(或任何您称其为文件)进行curl()请求,并且应针对数据库中的内容测试变量。

这是我能解释的最好的..用代码写出来是一项重要的工作,所以我无法提交。但是从您的代码来看,您对php有很好的了解,所以我相信您一定会成功!

祝你好运。

解决方法

我有一个主要的领域:@H_912_17@main.com,子:test1.main.comtest2.main.com和其他领域one.comtwo.com

现在完成如下操作:

ini_set("session.cookie_domain",".main.com");

$domain = 'main.com';

login.php

$user = $db->query("SELECT id,login FROM users WHERE email=? AND password=?",array($email,$password),"rowassoc");

if($user)
{
  $_SESSION['user_id'] = $user['id'];
  $_SESSION['user_name'] = $user['login'];

  $time = 100000;

  setcookie('email',$email,time() + $time,"/","." . $domain);
  setcookie('password',$password,"." . $domain);

  header('LOCATIOn: http://' . $user['login'] . "." . $domain);
  exit;
}

在每个页面上添加:

if(!isset($_SESSION['user_id']))
{
  if(isset($_COOKIE['email']) && isset($_COOKIE['password']))
  {
    $email = $_COOKIE['email'];
    $password = $_COOKIE['password'];

    $user = $db->query("SELECT id,"rowassoc");

    if($user)
    {
      $_SESSION['user_id'] = $user['id'];
      $_SESSION['user_name'] = $user['login'];
    }
  }
}
else
{
  $user = $db->query("SELECT id,login FROM users WHERE id=?",array($_SESSION['user_id']),"rowassoc");


  if(!$user)
  {
    setcookie('email','',time(),"." . $domain);
    setcookie('password',"." . $domain);
    unset($_SESSION['user_id']);

    session_destroy();
    setcookie("phpSESSID","","." . $domain);
  }
  else
  {
    $_SESSION['user_id'] = $user['id'];
    $_SESSION['user_name'] = $user['login'];
  }
}

logout.php

if(isset($_SESSION['user_id']))
{
  setcookie('email',"." . $domain);
  unset($_SESSION['user_id']);
  unset($_SESSION['user_name']);

  session_destroy();
  setcookie("phpSESSID","." . $domain);

  header('LOCATIOn: /main');
  exit;
}

但它仅适用于域@H_912_17@main.com及其子域test1.main.comtest2.main.com

我需要以某种方式保存会话和其他域one.comtwo.com

如何最好地进行安全身份验证,如果有解决方案,我真的很困惑,请举例说明。

大佬总结

以上是大佬教程为你收集整理的具有多个域和子域的PHP身份验证全部内容,希望文章能够帮你解决具有多个域和子域的PHP身份验证所遇到的程序开发问题。

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

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