我在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 [& #39; user_type_id']始终为1.
$ row值是一个int而$ _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']仍为字符串(1)" 1"
答案 0 :(得分:0)
我不知道造成问题的原因。但通常我会使用这种格式进行登录。
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
}
答案 1 :(得分:0)
session_start()应位于页面的顶部,而不是函数内部