0

我有两个虚拟主机:

Ex. testproject1.net and
    testproject2.net

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

请帮助处理这个问题。

提前致谢

4

1 回答 1

2

好的,就到这里。如果你愿意,可以再买一个Virtual Hostauthproject.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
?>

在所有站点中执行相同的操作。希望你能明白。

于 2012-10-12T09:43:24.170 回答