PHP多域名登陆

多域名登陆无非是共享登陆信息,对于父子级域名来说,比如www.demo.php7.com 和 www.php7.com,只要在配置好session就可以了;而对于不属于父子级站点来说,比如www.php7.com 和 www.site.com,客户端 cookie 中只有 sessionId ,登录相关信息全部在服务端,通过 sessionId 在服务端即可获取登录信息,可以这么理解,只要 www.php7.com 、www.site.com具有相同的 sessionId ,那么在服务端他们就可以根据相同 sessionId 拿到登录状态,也就共享了登录信息。


浏览器访问任何一个未登录网站(例如www.php7.com)都跳转到 www.site.com/domainA.php 登录中心进行登录,登录成功后设置登录状态,并设置 cookie 保存 sessionId ,其中 domain=.site.com, 此时 ,site.com 包括其子域名都能成功获取到 sessionid ,然后带着 sessionId 参数跳转到 http://php7.com/domainB.php?sessionid=123456&redirect_url=sx.com/xx.htm , php7.com/domainB.php 分析出 sessionId 后进行存储,然后跳转到 php7.com目标页,此时这个页面是登录状态的。

关键代码

<?php
//site : www.php7.com
session_start();
if(isset($_SESSION['login']) && $_SESSION['login']){
    echo 'login success';
}elseif(isset($_GET['session_id'])){
    echo $_GET['session_id'];
    // $_COOKIE['PHPSESSID'] = $_GET['session_id'];
    setcookie('PHPSESSID',$_GET['session_id'],0);
}else{
    $url = "http://www.site.com/codePHP/CrossDomain/domainA.php?redirect_url=php7.com/code/crossDomain/domainB.php";
    header("Location:$url");
}
//www.site.com
if(isset($_SESSION['login'])){
    echo 'login out';
    unset($_SESSION['login']);
}else{
    $user = $_GET['user']??'';
    $pass = $_GET['pass']??'';
    if(empty($user)){
        // echo $_GET['redirect_url'];die;
        // header("Location:http://www.site.com/codePHP/crossDomain/index.html?redirect_url=".$_GET['redirect_url']);
        include './domain.html';
    }else{
        $domain = new DomainA();
        $res = $domain->check($user,$pass);
        if($res){
            $_SESSION['login'] = true;
            if(isset($_GET['redirect_url'])){
                $url = "http://www.".$_GET['redirect_url']."?session_id=".session_id();
                header("Location:$url");
            }
            echo 'login success,session_id:'.session_id();
        }else{
            echo 'the user or pass of account is error';
        }
    }

}
这时候我访问www.php7.com,检测未登陆就会跳转到www.site.com登陆页面

这里写图片描述
登陆成功就会跳转回原来的页面
这里写图片描述
这时候我再刷新页面,就会显示登陆成功了
这里写图片描述

源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值