使用openid.php提供程序完全注销
我有一个PHP应用程序,它使用LightOpenID 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 // 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身份验证,因此它是不同的。基于标准表单的身份验证对我来说也是如此。