我的网站上有两页,其中一页名为" new_account.php"另一个是" visitor.php"。用户可以选择为自己创建一个新帐户,也可以选择访问帐户。
当用户选择"访客"我向" new_account.php"提出了请求。使用随机用户名和密码创建临时帐户,以便在用户完成后删除。我使用file_get_contents
作为请求,因为页面返回用于自动登录用户的用户哈希。
这是" visitor.php":
$url = getBaseUrl().'new-account.php';
$data = array(
'name' => $tempName,
'character-name' => $tempCharacterName,
'gender' => $tempGender,
'age' => $tempAge,
'parent-email' => $tempParentEmail,
'password' => $tempPassword,
'password-confirmation' => $tempPassword,
'temporary' => TRUE
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($result);
if($result != "error") {
User::loginUser($result, TRUE, $conn);
User::ifUserLoggedRedirect('game.php',$conn);
}
我的问题是,当请求成功并且在数据库中插入新的随机用户时,User :: loginUser尝试使用file_get_contents
返回的哈希(例如用户)查询用户数据图标或用户名)我得到一个空的结果集。
User::loginUser
就是这样:
public static function loginUser($userHash, $temporary, $conn) {
if(User::isAnyLogged($conn))
User::logout($conn);
User::safeSessionStart();
$result = $conn->prepare('SELECT p.screen_name, pi.url, p.id FROM player as p, player_icon as pi WHERE p.user_hash=? AND pi.id = p.player_icon_id');
$result->bind_param('s',$userHash);
$result->execute();
$res = $result->get_result();
if($res->num_rows == 0) {
die("Invalid user with hash ".$userHash);
}
$user_info = $res->fetch_assoc();
$_SESSION['user'] = new User($userHash, $temporary, $user_info['screen_name'], $user_info['url'], $user_info['id']);
setcookie('userHash',$userHash);
setcookie('temporary',$temporary ? '1' : '0' );
return $_SESSION['user'];
}
并且调用总是以无效的哈希消亡,但是如果我使用哈希查询用户来自phpmyadmin,那么用户实际上就在那里。通过访问" new_account.php"进行正常注册;也有效。
我尝试的第一件事是在从file_get_contents
获得结果后关闭并重新打开连接,但这不起作用。使用mysqli::refresh
也无效。我尝试将代码的登录部分移动到" new_account.php"但显然我也无法使用$_SESSION
从请求中设置file_get_contents
。
我也可以通过将新帐户代码复制到访问者页面来解决这个问题,但我宁愿将帐户创建保存在一个页面中。还有什么我可以尝试的吗?
答案 0 :(得分:0)
您应该使用require_once来包含new-account.PHP
这样,您可以使用所包含文件的代码,就好像它在您包含它的文件中一样。