session_regenerate_id()関数を行うタイミングについてお聞きしたいことがあります。
session_regenerate_id()関数は、セッションハイジャック対策としまして、セッションを再作成するための関数だと理解しているのですが、以下のコードではどこに配置するのが適切と思われますでしょうか?
以下のコードは簡易な交流サイトのログイン処理を行う為に作成しました「login.php」になります。
php
1 <?php 2 3session_start(); 4if(isset($_SESSION['id'])){ 5 6 header('Location:index.php'); 7 8}else if(isset($_POST['name']) && isset($_POST['password'])){ 9 $dsn = 'mysql:host=localhost;dbname=online_bbs;charset=utf8'; 10 $user = 'root'; 11 $password = '12345'; 12 $hash_password = password_hash($_POST['password'],$PASSWORD_DEFAULT); 13 14 try{ 15 $db = new PDO($dsn,$user,$password); 16 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); 17 $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 18 $stmt = $db->prepare(" 19 SELECT id,name,password FROM users WHERE name=:name AND password=:pass 20 "); 21 $stmt->bindValue(':name',$_POST['name'],PDO::PARAM_STR); 22 $stmt->bindValue(':pass',$hash_password,PDO::PARAM_STR); 23 $stmt->execute(); 24 25 if($row = $stmt->fetch()){ 26 $_SESSION['id'] = $row['id']; 27 28 29 header('Location : index.php'); 30 exit(); 31 }else{ 32 header('Location:login.php'); 33 exit(); 34 } 35 }catch(PDOException $e){ 36 die('エラー:' . $e->getMessage()); 37 } 38 39}else{ 40 41?> 42<!DOCTYPE html> 43<html lang="en"> 44<head> 45 <meta charset="UTF-8"> 46 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 47</head> 48<body> 49 <h1>テニススクール交流サイト</h1> 50 <h2>ログイン</h2> 51 <form action="login.php"method="post"> 52 <p>ユーザ名:<input type="text"name="name"></p> 53 <p>パスワード:<input type="password"name="password"></p> 54 <p><input type="submit"value="ログイン"></p> 55 </form> 56</body> 57</html> 58 59 60<?php } ?> 61
上記コードは、データベースからユーザー情報をselectできた場合のみ、ユーザーidをセッションに格納しているのですが、疑問としまして、「$_SESSION['id'] = $row['id'];」ここでログイン(セッションidを格納)した直後に、session_regenerate_id()を設定したとしても、セッションハイジャックされるのが、session_regenerate_id()を行われた後でしたら、意味がないように思えます。「session_regenerate_id()」を作成した後だった場合は、セッションハイジャックできない理由などが、あったりするのでしょうか?

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/11 00:37 編集
2019/04/11 01:46
2019/04/11 02:29 編集
2019/04/11 02:37 編集
2019/04/11 02:38
2019/04/11 02:39
2019/04/11 02:41
2019/04/11 02:49
2019/04/11 02:54 編集
2019/04/11 03:11
2019/04/11 03:18
2019/04/11 03:23 編集
2019/04/11 03:34
2019/04/11 03:37