使用openid.php提供程序完全注销

使用openid.php提供程序完全注销,php,session,cookies,openid,Php,Session,Cookies,Openid,我有一个PHP应用程序,它使用LightOpenID openid.PHP提供程序。登录正常,但注销不正常。注销后,您可以立即选择重新登录的选项,该选项将在没有问题的情况下为您登录。这是一个安全问题,而不是我希望应用程序的行为方式。注销后,我需要确保用户至少再次被询问密码。对于我的注销页面,我有: <?php // RAY_EE_logout.php session_start(); // CLEAR THE INFORMATION FROM THE $_SESSION ARRA

我有一个PHP应用程序,它使用LightOpenID openid.PHP提供程序。登录正常,但注销不正常。注销后,您可以立即选择重新登录的选项,该选项将在没有问题的情况下为您登录。这是一个安全问题,而不是我希望应用程序的行为方式。注销后,我需要确保用户至少再次被询问密码。对于我的注销页面,我有:

    <?php // RAY_EE_logout.php
session_start();

// CLEAR THE INFORMATION FROM THE $_SESSION ARRAY
$_SESSION = array();

// IF THE SESSION IS KEPT IN COOKIE, FORCE SESSION COOKIE TO EXPIRE


if (isset($_COOKIE[session_name()]))
{
   $cookie_expires  = time() - date('Z') - 3600;
   setcookie(session_name(), '', $cookie_expires, '/');
}



// TELL PHP TO ELIMINATE THE SESSION
session_destroy();

// REDIRECT TO THE HOME PAGE AFTER A FULL LOGOUT THROUGH GOOGLE
header("Location: https://accounts.google.com/Logout");
//exit;
?>
我最近添加了标题,而不是重定向回我的主页。这似乎起到了作用,但我希望用户在注销后登录到我的主页,而不是谷歌页面。我试图使用,但谷歌似乎不接受这一点,并抛出了一个错误

登录页面基本上是:

    <?php
require 'openid.php';
try {
    # Change 'localhost' to your domain name.
    $openid = new LightOpenID('www.mydomain.com');


    if(!$openid->mode) 
    {
        if(isset($_GET['login'])) 
        {
            $openid->identity = 'https://www.google.com/accounts/o8/id';
            $openid->required = array('contact/email'); // grab the users email as well (google only)
            header('Location: ' . $openid->authUrl());
        }
    } elseif($openid->mode == 'cancel') {
        echo 'User has canceled authentication!';
    } else {


        session_start();
        $_SESSION['auth'] = 'yes';
        $returnVariables = $openid->getAttributes();
    $_SESSION['emailAddress'] = $returnVariables['contact/email'];

}
}

?>

有什么想法吗?

我在这里用一个简单的代码尝试了你的代码,你的注销代码运行得很好。我发现你的链接中有一些问题。在logout.php页面中,为什么你再次链接logout.php?logout.php是你的主页吗?这里是我尝试过的代码

home.php代码

<html>
    <head></head>
    <body>
    <form action="login.php" method="post">
        <input type="text" name="name">
        <input type="password" name="password">
        <button>Submit</button>
    </form>
    </body>
</html>
 <?php // RAY_EE_logout.php
session_start();

// CLEAR THE INFORMATION FROM THE $_SESSION ARRAY
$_SESSION = array();

// IF THE SESSION IS KEPT IN COOKIE, FORCE SESSION COOKIE TO EXPIRE


if (isset($_COOKIE[session_name()]))
{
   $cookie_expires  = time() - date('Z') - 3600;
   setcookie(session_name(), '', $cookie_expires, '/');
}



// TELL PHP TO ELIMINATE THE SESSION
session_destroy();

// REDIRECT TO THE HOME PAGE AFTER A FULL LOGOUT THROUGH GOOGLE
require('home.php');
//exit;
?>
login.php代码

  <?php
    session_start();
    $name=$_POST['name'];
    $password=$_POST['password'];
    if($name='abc' && $password='123')
    {
        echo 'you are login!';
        echo "<a href='logout.php'>Logout</a>";
    }
    else
    die("password not match!!");
?>
logout.php代码

<html>
    <head></head>
    <body>
    <form action="login.php" method="post">
        <input type="text" name="name">
        <input type="password" name="password">
        <button>Submit</button>
    </form>
    </body>
</html>
 <?php // RAY_EE_logout.php
session_start();

// CLEAR THE INFORMATION FROM THE $_SESSION ARRAY
$_SESSION = array();

// IF THE SESSION IS KEPT IN COOKIE, FORCE SESSION COOKIE TO EXPIRE


if (isset($_COOKIE[session_name()]))
{
   $cookie_expires  = time() - date('Z') - 3600;
   setcookie(session_name(), '', $cookie_expires, '/');
}



// TELL PHP TO ELIMINATE THE SESSION
session_destroy();

// REDIRECT TO THE HOME PAGE AFTER A FULL LOGOUT THROUGH GOOGLE
require('home.php');
//exit;
?>
以下是输出:

单击注销后,转到home.php


注销后,它将转到主页,这是您的问题吗?是的,在完全注销后,我需要重定向回我的主页。您可以提供您的登录页代码吗?在您的登录页中,您的注销链接在哪里?您是否在注销页中提供了注销链接?谢谢您的答复,但这不起作用。我使用require得到的结果与直接转到主页的header得到的结果相同。随后的登录将直接通过,用户不会受到质疑。我没有收到任何错误。当我单击登录按钮时,它只是将我作为同一用户重新登录。从未挑战过凭据。这里的示例没有使用OpenID提供程序和Google身份验证,因此它是不同的。基于标准表单的身份验证对我来说也是如此。