php.ini のセッション関連の設定確認
サーバーによってデフォルトの設定内容は異なりますが、エックスサーバー(x10)の場合、セッションIDの文字数は「32」、文字の種類は「5」(0-9, a-v) になっています。
PHP 7.1.0 から文字列の長さを変更する「session.sid_length」と文字の種類を変更する「session.sid_per_character」が利用可能になりましたので、それぞれ設定して変更します。
セッション関連項目の抜粋(php.ini)
[Session] session.save_handler = files session.save_path = "/home/xxxx/xxxx.xsrv.jp/xserver_php/session" session.use_cookies = 1 session.use_only_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440 session.bug_compat_42 = 0 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 32 session.entropy_file = /dev/urandom session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 session.hash_function = 1 session.hash_bits_per_character = 5 session.use_strict_mode = 1
文字列の長さと文字種を変更
php.iniの場合
文字列の長さを変更
22 から 256 までの値が使えますが、今回は 64 と設定しました。
session.sid_length = 64
session.sid_length は、セッション ID 文字列の長さを指定します。 22 から 256 までの値が使えます。 デフォルトは 32 です。互換性を考慮するなら 32 や 40 などを使ってもかまいません。 セッション ID は長ければ長いほど推測されにくくなります。少なくとも 32 を指定することを推奨します。
https://www.php.net/manual/ja/session.configuration.php#ini.session.sid-length
文字種を変更
4 から 6 までの値が利用出来それぞれ利用する文字種が異なります。今回は 6 を設定しました。
session.sid_bits_per_character = 6
値 | 文字種 |
4 | 0-9, a-f |
5 | 0-9, a-v |
6 | 0-9, a-z, A-Z, “-“, “,” |
session.sid_per_character エンコードされたセッション ID 文字のビット数を指定します。指定できる値は ‘4’ (0-9, a-f)、’5′ (0-9, a-v)、’6′ (0-9, a-z, A-Z, “-“, “,”) です。 デフォルトは 4 です。大きいほどセッション ID が強力になります。 大半のシステムでは、5 を推奨します。
https://www.php.net/manual/ja/session.configuration.php#ini.session.sid-bits-per-character
ini_set() の場合
ini_set() を利用しPHPコード内で変更することも可能です。
文字列の長さを変更
ini_set('session.sid_length', 64);
文字種を変更
ini_set('session.sid_bits_per_character', 6);
動作確認
変更前
デフォルトの session.sid_length = 32 / session.sid_bits_per_character = 5 の場合は、下記のようなセッションIDが生成されました。
string(32) "21fdc48c6f12025cc500489e81fb2e69"
変更後
session.sid_length = 64 / session.sid_bits_per_character = 6 に変更後は文字列の長さも文字種も変わり下記のようなセッションIDが生成されました。
string(64) "3ip9uScJirU51U3M,OfrAIJb41zXr1iJwHL1-3hX3MCk0Hpa4kvyxKux7,vw4d02"
確認用コード
<?php
// 32 から 64 に変更
ini_set('session.sid_length', 64);
// 5 から 6 に変更
ini_set('session.sid_bits_per_character', 6);
session_start();
var_dump(session_id());
動作環境情報
エックスサーバー(x10) PHP7.2.17
コメント