首页 / PHP / 具有多个域和子域的PHP身份验证
具有多个域和子域的PHP身份验证
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了具有多个域和子域的PHP身份验证,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2908字,纯文字阅读大概需要5分钟。
内容图文
![具有多个域和子域的PHP身份验证](/upload/InfoBanner/zyjiaocheng/712/ca61f0f98b41476aa745cea3461befe9.jpg)
我有一个主域名:main.com,子域名:test1.main.com,test2.main.com和其他域名one.com,two.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, time() + $time, "/", "." . $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, login FROM users WHERE email=? AND password=?",
array($email, $password), "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', '', time() , "/", "." . $domain);
unset($_SESSION['user_id']);
session_destroy();
setcookie("PHPSESSID","",time(), "/", "." . $domain);
}
else
{
$_SESSION['user_id'] = $user['id'];
$_SESSION['user_name'] = $user['login'];
}
}
logout.php
if(isset($_SESSION['user_id']))
{
setcookie('email', '', time() , "/", "." . $domain);
setcookie('password', '', time() , "/", "." . $domain);
unset($_SESSION['user_id']);
unset($_SESSION['user_name']);
session_destroy();
setcookie("PHPSESSID","",time(), "/", "." . $domain);
header('Location: /main');
exit;
}
但它仅适用于域main.com及其子域test1.main.com,test2.main.com.
我需要以某种方式保存会话和其他域one.com,two.com.
如何最好地进行安全认证,如果有解决方案,我真的很困惑,请举例说明.
解决方法:
据我所知,子域之间的交叉会话很好,但它不会延续到一个完整的新域.要做到这一点,您需要某种集中式数据方法或API.
数据库方法:您必须创建远程MySQL数据访问,以便domain2.com可以访问domain1.com上的数据库.执行登录时,不仅应创建新会话,还应将唯一的登录令牌(具有到期时间)放入mysql数据库.现在,对于从domain1.com到domain2.com的每个链接,您应该添加一个包含随机生成的会话ID的$_GET变量(md5哈希会这样做). domain2.com,在收到访问者后,将获取$_GET变量,通过MySQL数据库运行它以查找登录令牌,如果匹配,请考虑该用户登录(并且可能嵌入$_COOKIE作为以及存储登录数据).这将使登录可在两个完全不同的域之间转移.
API方法:您需要创建一个API方法,以便domain1.com可以响应来自授权域的外部请求,以便在转发用户时检索登录令牌.此方法还要求从domain1.com到domain2.com的所有链接都附加$_GET变量以传递唯一会话哈希.然后,在收到访问者后,domain2.com将对domain1.com/userapi.php(或任何您调用该文件)执行curl()请求,并且应根据数据库中的内容对变量进行测试.
这是我能解释的最好的..在代码中编写这个是一项重要的工作,所以我不能提交.但是根据你的代码判断,你对PHP非常了解,所以我相信你会把它拉下来!
祝你好运.
内容总结
以上是互联网集市为您收集整理的具有多个域和子域的PHP身份验证全部内容,希望文章能够帮你解决具有多个域和子域的PHP身份验证所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。