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();
} } }
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();
}
?>