我的脚本中有一个错误,我找不到错误出现的原因。
这是我有错误的文件:
<?php
ob_start();
session_start();
require ('openid.php');
function logoutbutton() {
echo "<form action='"steamauth/logout.php'" method='"post'"><input value='"Logout'" type='"submit'" /></form>"; //logout button
}
function steamlogin()
{
try {
require("settings.php");
$openid = new LightOpenID($steamauth['domainname']);
$button['small'] = "small";
$button['large_no'] = "large_noborder";
$button['large'] = "large_border";
$button = $button[$steamauth['buttonstyle']];
if(!$openid->mode) {
if(isset($_GET['login'])) {
$openid->identity = 'http://steamcommunity.com/openid';
header('Location: ' . $openid->authUrl());
}
return "<form action='"?login'" method='"post'"> <input type='"image'" src='"http://cdn.steamcommunity.com/public/images/signinthroughsteam/sits_".$button.".png'"></form>";
}
elseif($openid->mode == 'cancel') {
echo 'User has canceled authentication!';
} else {
if($openid->validate()) {
$id = $openid->identity;
$ptn = "/^http:'/'/steamcommunity'.com'/openid'/id'/(7[0-9]{15,25}+)$/";
preg_match($ptn, $id, $matches);
$_SESSION['steamid'] = $matches[1];
include_once("link.php");
$query = mysql_query("SELECT * FROM users WHERE steamid='".$_SESSION['steamid']."'");
if (mysql_num_rows($query) == 0)
{
$time=time();
mysql_query("INSERT INTO users (steamid,reg) VALUES ('".$_SESSION['steamid']."','$time')") or die("MySQL ERROR: ".mysql_error());
}
//Determine the return to page. We substract "login&"" to remove the login var from the URL.
//"file.php?login&foo=bar" would become "file.php?foo=bar"
$returnTo = str_replace('login&', '', $_GET['openid_return_to']);
//If it didn't change anything, it means that there's no additionals vars, so remove the login var so that we don't get redirected to Steam over and over.
if($returnTo === $_GET['openid_return_to']) $returnTo = str_replace('?login', '', $_GET['openid_return_to']);
header('Location: '.$returnTo);
} else {
echo "User is not logged in.'n";
}
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
}
?>
错误在第 24 行
这部分:
if(!$openid->mode) {
if(isset($_GET['login'])) {
$openid->identity = 'http://steamcommunity.com/openid';
header('Location: ' . $openid->authUrl());
}
这是一个 Steam 登录脚本,使用户能够登录我的网站,我希望有人可以帮助我。
您需要
将调用session_start()
推迟到您确定的代码块之后。调用session_start()
将 HTTP 标头发送到浏览器。一旦发生这种情况,您将无法再使用 LOCATION 标头重定向到登录页面。