我正在切换到 PDO 准备好的语句,但我的代码在获取和使用会话 ID 时遇到了问题。
当客户注册时 session_id 设置为等于 user_id(自动递增),并且 session_id 在用户返回时以相同的方式设置。这在切换到 PDO 之前工作正常,但现在在任何后续页面上都无法识别 session_id(它正在查看 'user_id' 为空)
我是否需要切换到使用 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();
} } }
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'];
}
允许我在后续页面上引用会话 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'];
?>
auth.php 文件
<?php
session_start();
if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')) {
header("location: login_failed.html");
exit();
}
?>