在两个虚拟主机PHP中实现SSO

时间:2012-10-12 09:31:31

标签: php single-sign-on

我有两个虚拟主机:

Ex. testproject1.net and
    testproject2.net

我在那里创建了两个简单的登录脚本。我想为它实现SSO实现。一旦用户使用testproject1.net进行身份验证,我想为两个虚拟主机(testproject1.net和testproject2.net)设置会话。意味着如果我打开testproject2.net,它会通过获取会话值自动进行身份验证。

请帮忙解决这个问题。

提前致谢

1 个答案:

答案 0 :(得分:2)

好的,就在这里。如果您愿意,请使用Virtual Host另一个authproject.net。并将身份验证信息发布到表单中。让它在会话中设置。

现在,一旦您将凭据提供给authproject.net域以及授权后的位置,它就会将身份验证数据发布到相应的目的地。

testproject1.net/index.php的来源:

<?php
    if (isset($_SESSION["user"]))
        die($_SESSION["user"]["name"] . " is logged in!");
    else
        die('<a href="auth.php">Login</a>');
?>

testproject1.net/auth.php的来源:

<?php
    if (isset($_SESSION["user"]) && !count($_POST))
    {
        header("Location: index.php");
        die();
    }
    elseif (count($_POST))
        if ($_POST["username"] == "admin" && $_POST["password"] == "letmein")
            $_SESSION["user"]["title"] = "Administrator"; # The session is set
        else
            showForm(); # Invalid Password
    else
        showForm(); # Log In Screen
?>

<?php
    session_start();
    if (isset($_SESSION["user"]) && !count($_POST))
    {
        header("Location: index.php");
        die();
    }
    elseif (count($_POST))
        if ($_POST["username"] == "admin" && $_POST["password"] == "letmein")
        {
            $_SESSION["user"]["title"] = "Administrator"; # The session is set
            if (isset($_GET["redirect"]))
            {
                # Start crappy implementation :P
                echo '<form method="post" action="', $_GET["redirect"], '/auth.php" id="authfrm"><input type="hidden" name="username" value="', $username, '"><input type="hidden" name="password" value="', $password, '"></form><script type="text/javascript">document.getElementById("authfrm").submit();</script>';
            }
            else
                header("Location: index.php");
        }
        else
            showForm(); # Invalid Password
    else
        showForm(); # Log In Screen
?>

同样要在所有地点进行。希望你明白。