jackytom
@jackytom

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPでSESSIONが引き継がれない。

Q&A

Closed

PHPでSESSION['customer']が引き継がれません。
送信元でVAR_DUMPしたところ、$_SESSION['customer']が生きているころを確認しましたが、送信先で同様にVAR_DUMPすると、下記のエラーになります。

Warning: Undefined array key "customer" in C:\xampp\htdocs\Portfolio\password_reissue_update.php on line 17
NULL
Warning: Undefined array key "customer" in C:\xampp\htdocs\Portfolio\password_reissue_update.php on line 18

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\Portfolio\password_reissue_update.php on line 18
NULL

他の自分で書いたソースで、上手くいっているものと比較すると、違いは送信元でheader関数で遷移していることなので、検索して、
https://mgmgblog.com/post-2461/
を確認しましたが、exitも併用しています。

送信先で新たにCSRF対策用のSESSIONを作成していることが気になると言えば気になるのですが。

原因究明にご協力いただければ幸いです。
ソースコードを添付します。

送信元

<?php
	require_once('db_connect.php');
	require_once('password_db.php');

	function escape($val)
		{
		return htmlspecialchars($val, ENT_QUOTES | ENT_HTML5, 'UTF-8');
		}

	$mailAddress = escape($_POST['mail']);

	$sql = ("select 
				*
				from
				customer
				where convert(AES_DECRYPT(UNHEX(mail_address), '" . $password . "')USING utf8) = :mail_address");
	$stmt = $pdo->prepare($sql);
	$stmt -> bindValue(':mail_address', $mailAddress);
	$stmt -> execute();
	$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
							
	foreach($row as $data){
		if(isset($data)){
			$_SESSION['customer']=[
				'customer_id'=>$data['customer_id']
			];
		}
	}

	var_dump($data);
	var_dump($_SESSION['customer']);

	if(isset($_SESSION['customer'])){
		header('Location: password_reissue_update.php', true, 303);
		exit();
		}
		else{
		header('Location: login_failed.php', true, 303);
		exit();
		}
?>

送信先

<?php
	session_start();
	header('Expires:-1');
	header('Cache-Control:');
	header('Pragma:');
	function generateToken(){
		$bytes = openssl_random_pseudo_bytes(16);
		return bin2hex($bytes);
	}
	$token = generateToken();
	$_SESSION['token'] = $token;

	function escape($val)
	{
		return htmlspecialchars($val, ENT_QUOTES | ENT_HTML5, 'UTF-8');
	}
	var_dump($_SESSION['customer']);
	var_dump($_SESSION['customer']['customer_id']);
?>
<!doctype html>
<html lang=ja>
	<head>
		<meta charset="utf-8">
		<title>パスワード再発行申請</title>
		<meta name="description" content="ヘッドセラピーを中心としたセラピーのサービスを提供しております。">
		<!--リセットcss-->
		<link rel="stylesheet" href="https://unpkg.com/ress/dist/ress.min.css">
		<!--css-->
		<link href="css/password_reissue.css" rel="stylesheet">
		<!--レスポンシブ対応-->
		<meta name="viwport" content="width=device-width, initial-scale=1">
		<!--Googleフォント-->
		<link href="https://fonts.googleapis.com/css2?family=Sawarabi+Gothic&display=swap" rel="stylesheet">
		<link href="https://fonts.googleapis.com/css2?family=Shippori+Mincho:wght@500&display=swap" rel="stylesheet">
	</head>
	<body>
		<?php require_once('header.php')?>
		<h1>パスワード再発行申請</h1>
		<form class = "menu" id="confirm" method="post" action="password_reissue_update_conf.php">
			<input type="hidden" name="token" class="token" id="token" value="<?=$token?>">
			<div class = "new_password" id="new_password">
				<label for = "new_pass">新パスワード</label>
				<input type = "password" name = "password" id = "password">
			</div>
			<div class = "new_password_con" id="new_password_con">
				<label for = "password">新パスワード(確認)</label>
				<input type = "password" name = "password_con" id = "password_con">
			</div>
			<div class="button">
				<button type="return" class="return" name="return" id="return" onclick="history.back()">戻る</button>
				<button type = "submit" class="send" name = "send" value="send" id="send">送信</button>
			</div>
		</form>
		<?php require_once('footer.php')?>
		<?php require_once('js/password_reissue_update_js.php')?>
	</body>
</html>

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

0

2Answer

session_start();が送信先にしかありませんが、送信元にも必要ではないですか?

2Like

Comments

  1. @jackytom

    Questioner

    回答ありがとうございます。
    ご指摘の通り送信元にsession_startがないのが原因でした。
    本件、クローズさせていただきます。

Your answer might help someone💌