お世話になります。
前提・実現したいこと
$_SESSION情報の維持
プログラム全体の目的は、ユーザーが既に登録したメールアドレスを変更するとき、
新しいメールアドレスに、ランダムな文字列を送り、これをフォームに入力させて
新しいメールアドレスが、確かに本人の物であると確認する、というものです。
発生している問題・エラーメッセージ
ログイン直後、1ページ目にログインした旨を示す文字列を
$_SESSION['login']に格納しました。このページからの
遷移ではこの文字列が$_SESSION['login']に残っていますが、
その次の遷移後に$_SESSIONが空になっています。
該当のソースコード
1ページ目
php
1<?php 2session_start(); 3session_regenerate_id(true); 4//ログイン手続きは長いので省略 5$_SESSION['login']="login"; 6?> 7 <p>変更後のメールアドレス:</p> 8 <form action="2ページ目のURL" method="post"> 9 <input type="email" name="Newmail" size="60" maxlength="255"> 10<input type="submit" value="メールアドレスを変更"> 11</form> 12 13
2ページ目
php
1<?php 2session_start(); 3require "random.php";//乱数を作る手製ライブラリ 4$sessionname=generate_password(32); 5session_name($sessionname); 6session_regenerate_id(true); 7var_dump($_SESSION);//この時点ではセッション情報が残っている 8 9 10$pass=generate_password(10);//10文字の乱数を作る 11 12//ここで$passをデータベースにpassword_hashを通して保存 13 14mb_send_mail($_POST['Newmail'],"メール変更キー送付 ご利用をありがとうございます。",$pass);//キーをメールで送付 15 16?> 17<p>キーを入力</p> 18<form action="3ページ目のURL" method="post"> 19<input type="password" name="NewmailKey" size="60" maxlength="255"> 20<input type="submit" value="メールアドレスを変更"> 21</form> 22
3ページ目
php
1session_start(); 2session_regenerate_id(true); 3var_dump($_SESSION);//ここで消えたことが確認された
どうすれば、セッション情報が安全に継続されますか。
session_idの書き換えが間に合わないほどの速さのページの遷移はどのようにして行っているのでしょうか?
フォームのテキストボックスに文字列をコピペ等で書き込み、送信ボタンを押しています。
それだと、HTMLが描画されているので、ブラウザがクッキーにセッションIDを書き込むまでに遷移してるとは考えにくいですねぇ。記載されている以外のコードに何かありそうな気がします。
もしかして送信ボタンを押してからsession_regenerate_id()して次ページに移動するような処理にしています?
2ページ目から3ページ目への遷移は、送信ボタンのみで、3ページ目でsession_regenerate_id()を行っています。
関係ないと思っていたのですが、コードを見直した所、2ページ目でsession_regenerate_idの前に、セッション名の変更を行っておりました。
セッション名を変更しなければ大丈夫かと思います。(たぶん)
回答2件
あなたの回答
tips
プレビュー