检查PDO中的会话ID是否为ISSET

Cha*_*per 5 php pdo sessionid isset

我正在切换到PDO预处理语句,我在获取和使用会话ID方面遇到了问题.

当客户注册时,session_id被设置为等于user_id(自动递增),并且当用户返回时,session_id以相同的方式设置.这在切换到PDO之前正常工作,但是现在session_id在任何后续页面上都没有被识别(它将'user_id'视为null)

我是否需要切换到使用PDO会话处理程序,还是有办法继续使用我熟悉的方法?

mysql - 这是我用来设置会话ID的代码(这个工作正常):

// Statements defining $user_name, $password and $hashedPassword (as shown below), and mysql_real_escape_string
// Insert statement
if($result) { 
$qry="SELECT * FROM customer_info WHERE user_name='$user_name' AND password='".sha1($salt + $_POST['password'])."'";
$result=mysql_query($qry);
if($result) {
    if(mysql_num_rows($result) == 1) {
    session_regenerate_id();
    $member = mysql_fetch_assoc($result);
    $_SESSION['SESS_USER_ID'] = $member['user_id'];
    session_write_close();
    exit();
    } } }
Run Code Online (Sandbox Code Playgroud)

PDO - 这是我尝试的代码(会话ID未设置):

$user_name = $_POST['user_name'];
$password = $_POST['password'];  
$hashedPassword = sha1($salt . $password); 
$stmt = $conn->prepare('INSERT INTO customer_info (...) VALUES(...)');
$stmt->bindParam(':user_id', $user_id); 
...  
$insertResult = $stmt->execute();  
if ($insertResult) {
    $qry="SELECT * FROM customer_info WHERE user_name = $user_name AND password=$hashedPassword";
    if($qry) {
        $affected_rows = $stmt->rowCount();
        if ($affected_rows == 1)  {   
            session_regenerate_id();
            $member = $stmt->fetch();
            $_SESSION['SESS_USER_ID'] = $member['user_id'];   
        }  
Run Code Online (Sandbox Code Playgroud)

允许我在后续页面上引用会话ID的附加代码

此代码位于每个后续页面的顶部:

<?php
  //Starts session and checks if the session variable SESS_USER_ID is present or not
  require_once('auth.php');  
  //Database connection and Open database
  require_once('config.php');  
  $user_id = $_SESSION['SESS_USER_ID']; 
?>
Run Code Online (Sandbox Code Playgroud)

auth.php文件

<?php
session_start();
if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')) {
    header("location: login_failed.html");
    exit();
}
?>
Run Code Online (Sandbox Code Playgroud)