PHP$\u会话值设置不正确
我在PHP中有一个简单的登录页面,它在mysql数据库中查找提供的用户名和密码,并在找到用户时设置PHP$\会话变量。它基本上可以正常工作,除了$\u会话['user\u type\u id']的值为1,而不管$row[0][“user\u type\u id”]的值是多少 下面代码中的var_dump($row[0][“user_type_id”])确认其值正确,var_dump($_SESSION)(与第一个var_dump一起)显示$_SESSION['user_type_id']始终为1 $row值是int,而$\u会话值是字符串,我不知道这是否相关。我能想到的唯一一件事是,我正在其他地方重置会话变量,但我不记得这样做过,我也找不到它发生在任何地方 我正在尝试使用此值来控制权限。有人能看出我哪里做错了吗 这是会话代码PHP$\u会话值设置不正确,php,mysql,session,Php,Mysql,Session,我在PHP中有一个简单的登录页面,它在mysql数据库中查找提供的用户名和密码,并在找到用户时设置PHP$\会话变量。它基本上可以正常工作,除了$\u会话['user\u type\u id']的值为1,而不管$row[0][“user\u type\u id”]的值是多少 下面代码中的var_dump($row[0][“user_type_id”])确认其值正确,var_dump($_SESSION)(与第一个var_dump一起)显示$_SESSION['user_type_id']始终为1
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\u dump的输出($row[0]['user\u type\u id'])
下面是var_dump($_SESSION['user_type_id'])的输出
编辑:下面是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\u dump($\u SESSION['user\u type\u id']仍然是字符串(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
}
session_start()应该位于页面顶部,而不是函数内部只要尝试在$row[0][“user_type_id”]中使用单引号而不是双引号即可;我一点也不确定,但请尝试一下。谢谢@VaisakhPc,不过不是这样,我尝试了各种引号,只是在直接从var_转储复制变量名时使用了双引号,以确保其正确性。这只是个人偏好,与使其正常工作无关。许多网页错误地说它一定是第一个linphp文件中的e,这是错误的,不幸的是,它遍布整个Web。在这种情况下,它已经在每个页面的开头被调用。我已经从函数中删除了这一行,它似乎仍然可以正常工作(除了一点不起作用)谢谢。该函数工作正常,id和用户名设置正确,只是用户类型id值设置不正确。仍然存在问题??是的!同样的问题。我暂时没有回答,也许问题稍后会变得明显…请尝试var_dump($result)和注释输出。我已经添加了var_dump($result)输出到原始post
array(5) {
["id"]=>
int(2)
["user_type_id"]=>
int(500)
["username"]=>
string(5) "shane"
["password"]=>
string(8) "***"
["email"]=>
string(13) "***@***.**"
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
}