はじめに
学習記録のアウトプット・自分自身の備忘録として書いた記事です。
今回はPHPのセッションがうまくいかなかったためその概要と解決方法についてメモしていきます。
やりたかったこと
以下のように設定した$_SESSION['$csrfToken']
をページ遷移後に反映したい。
$csrfToken = bin2hex(random_bytes(32));
$_SESSION['$csrfToken'] = $csrfToken;
トラブルの症状
ページ遷移後に$_SESSION
が記録されていませんでした。
セッションファイルの出力先を指定する。
(これは必要ではないかもしれませんが念のため。)
Cloud9はそもそもデフォルトではphp5.6のため
random_bytes
は使えません。
そのためphp7.2をyumでインストール。
この状態でphpinfo() を実行すると、session.save_pathの右カラムはno valueになっています。
デフォルトのセッションファイルの格納先が特に指定されていなかったため/etc/php.ini
で
php.ini
; RPM note : session directory must be owned by process owner
; for mod_php, see /etc/httpd/conf.d/php.conf
; for php-fpm, see /etc/php-fpm.d/*conf
; session.save_path = "/tmp"
↓";"を外す。
php.ini
; RPM note : session directory must be owned by process owner
; for mod_php, see /etc/httpd/conf.d/php.conf
; for php-fpm, see /etc/php-fpm.d/*conf
session.save_path = "/tmp"
変更後デバックしてみて以下が作成されていることを確認。
/tmp/sess_*
session_start()の書く位置
<?php
session_start();
と<?php
直下に書く必要があります。
尚且つ$_SESSION
の直前ではなく、一番最初のphpタグの直下です。。。
参考