PHP $_SESSION 值设置不正确

标签 php mysql session

我有一个简单的 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/

相关文章:

php - 如何在多个子域中使用公共(public) header

php - 使用 PHP 将 HTML 表单中的数据插入到 MySQL 数据库

php mysql 计算连续行

php - 为我的网站寻找一个好的照片库幻灯片放映工具

security - session 攻击,新的攻击品种是什么?

java - 如何在浏览器中执行 "back"和 "forward"时强制用户输入用户名和密码?

php - 使用 Prepared Statement,我如何返回插入行的 id?

php - 分页错误

php - php api中如何处理mysql超时问题

AngularJS 服务器 session 和与 NodeJS 后端服务器的身份验证