我有一个简单的 PHP 登录页面,它在 mysql 数据库中查找提供的用户名和密码,如果找到用户,则设置 php $_SESSION 变量。它大部分工作正常,除了 $_SESSION['user_type_id'] 的值为 1,无论 $row[0]["user_type_id"] 的值是什么。
下面代码中的 var_dump ($row[0]["user_type_id"]) 确认它具有正确的值,var_dump($_SESSION) (与第一个 var_dump 一起)显示 $_SESSION['user_type_id'] 始终是1.
$row 值是一个 int,而 $_SESSION 值是一个字符串,我不知道这是否相关。我唯一能想到的是我正在其他地方重置 session 变量,但我不记得这样做过,而且我找不到它在任何地方发生。
我正在尝试使用此值来控制权限。谁能看到我哪里出错了?
这是 session 代码
public static function new_session ($username, $pw, $inactive) {
$db = mydb::getConnection();
$statement = $db->prepare('SELECT * FROM users WHERE username = :parameter1 AND `password` = :parameter2');
$statement->bindValue(':parameter1', $username);
$statement->bindValue(':parameter2', $pw);
$statement->execute();
$row = $statement->fetchAll();
var_dump ($row[0]["user_type_id"]);
if (count($row) == 1) {
session_start();
ini_set('session.gc_maxlifetime', 60 * 20);
$_SESSION['name'] = $row[0]['username'];
$_SESSION['id'] = $row[0]['id'];
$_SESSION['user_type_id'] = $row[0]["user_type_id"];
$_SESSION['max'] = $inactive;
$_SESSION['timeout'] = time() + $inactive;
$_SESSION['loggedin'] = true;
return true;
} else {
return false;
}
}
这是 var_dump ($row[0]['user_type_id']) 的输出
int(500)
这是 var_dump ($_SESSION['user_type_id']) 的输出
string(1) "1"
编辑:下面是 var_dump($result) 的输出,如 @user3314428 下面的建议
array(5) {
["id"]=>
int(2)
["user_type_id"]=>
int(500)
["username"]=>
string(5) "shane"
["password"]=>
string(8) "***"
["email"]=>
string(13) "***@***.**"
}
var_dump ($_SESSION['user_type_id'] 仍然是 string(1) "1"
最佳答案
我不知道是什么导致了这里的问题。但通常我使用这种格式进行登录。
if(!isset($_SESSION) session_start();
public static function new_session ($username, $pw, $inactive) {
$db = mydb::getConnection();
$statement = $db->prepare('SELECT * FROM users WHERE username = :parameter1 AND `password` = :parameter2');
$statement->bindValue(':parameter1', $username);
$statement->bindValue(':parameter2', $pw);
$statement->execute();
if($statement->rowCount()==1)
{
$result = $statement->fetch(PDO::FETCH_ASSOC);
$_SESSION['user_type_id']=$result['user_type_id'];
$_SESSION['var2']= $result['var2'];
//and so on
}
关于PHP $_SESSION 值设置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22556985/