質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

6582閲覧

【PHP】session_idが毎回変わってしまいます。

koou

総合スコア57

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2018/07/03 11:13

編集2018/07/03 12:10

ローカル環境でPHPでメールフォームを作成し、本番環境で動作テストを行ったのですが動作が上手くいきませんでした。
具体的には、$_SESSIONで保持した入力値がページを遷移後に無くなっていました。

調べていくと、session_start()を実行する度にsession_idが変わっていたためでした。
session_start()の後にsession_regenerate_id()を書かずに素のphpファイルで試しました。

同じ環境サーバー内の別サイトではこのような現象が見られなかったため困っております。

php.iniの設定などが同じでもサーバー側での設定でsession_idを毎回変更することなどができるのでしょうか。
※サーバーサイドに関しては、知識が薄いため見当違いのことを書いていたらすいません。

PHPのバージョンは「5.6.26」です。

php.iniのsessionに関する設定は以下になります。

Session Supportenabled
Registered save handlersfiles user
Registered serializer handlersphp_serialize php php_binary wddx
DirectiveLocal ValueMaster Value
session.auto_startOffOff
session.cache_expire180180
session.cache_limiternocachenocache
session.cookie_domainno valueno value
session.cookie_httponlyOnOn
session.cookie_lifetime00
session.cookie_path//
session.cookie_secureOnOn
session.entropy_file/dev/urandom/dev/urandom
session.entropy_length3232
session.gc_divisor10001000
session.gc_maxlifetime14401440
session.gc_probability11
session.hash_bits_per_character55
session.hash_function00
session.namePHPSESSIDPHPSESSID
session.referer_checkno valueno value
session.save_handlerfilesfiles
session.save_path/var/lib/php/sessionno value
session.serialize_handlerphpphp
session.upload_progress.cleanupOnOn
session.upload_progress.enabledOnOn
session.upload_progress.freq1%1%
session.upload_progress.min_freq11
session.upload_progress.namePHP_SESSION_UPLOAD_PROGRESSPHP_SESSION_UPLOAD_PROGRESS
session.upload_progress.prefixupload_progress_upload_progress_
session.use_cookiesOnOn
session.use_only_cookiesOnOn
session.use_strict_modeOffOff
session.use_trans_sid00

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ockeghem

2018/07/03 12:03

PHPのバージョンはどれでしょうか? また、php.iniのうち、session. で始まる設定をすべて教えていただけると回答しやすいです。
koou

2018/07/03 12:11

すいません漏れていました。情報を更新しましたのでよろしくお願いします。
guest

回答3

0

ベストアンサー

php.ini等で session.cookie_domain を指定していませんか?
session.cookie_domain が間違った設定になっていると、セットしたクッキーがブラウザに受付られず、結果として毎回セッションIDが変わる結果になると思います。
原因はこれに限らないと思いますので、調査のためには、ブラウザの開発ツール等で、レスポンスヘッダとリクエストヘッダを確認するとよいでしょう。


追記ありがとうございます。php.iniに以下が指定されていますが…

session.cookie_secure On On

これだと、HTTPSの場合のみクッキーを送信することになります。本番サーバーはHTTPSでしょうか? もし、HTTPならば、上記設定を OFF にするべきです。

投稿2018/07/03 11:48

編集2018/07/04 00:39
ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koou

2018/07/04 02:08

本番サーバーはHTTPSの予定です。 HTTPSが関係しているとは思いませんでした。 ありがとうございます! とても助かりました。
ockeghem

2018/07/04 02:27

HTTPSの予定です、ということですが、HTTPSになったら上記は on にしてくださいね。
guest

0

まさか、サーバーの現在日時が狂っていたりはしないよね?

投稿2018/07/03 12:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

session_start()する前に明示的に

PHP

1unset($_COOKIE["PHPSESSID"]);

すればセッションIDはクリアされます。
そうでなくてもクッキーがなんらかの障害を受ければ同様でしょう。

sample

以下2つのファイル(x.php、y.php)を用意して、交互に呼び出し合ってみてください

  • x.php

PHP

1<?php 2session_start(); 3print_r($_COOKIE); 4print_r($_SESSION); 5if(!isset($_SESSION["count"])) $_SESSION["count"]=0; 6$_SESSION["count"]++; 7?> 8<a href="y.php">y</a>
  • y.php

PHP

1<?php 2session_start(); 3print_r($_COOKIE); 4print_r($_SESSION); 5if(!isset($_SESSION["count"])) $_SESSION["count"]=0; 6$_SESSION["count"]++; 7?> 8<a href="x.php">x</a>

投稿2018/07/03 11:51

編集2018/07/03 12:33
yambejp

総合スコア114777

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

koou

2018/07/03 12:16

ご回答ありがとうございます。 上記のコード試してみたのですが、同様にIDが毎回変わってしまいました。
yambejp

2018/07/03 12:34 編集

>上記のコード試してみたのですが いや逆、例示の処理を書くとIDが引き継がれません。 sample追記しました PHPSESSIDの値が引き継がれるか確認してみてください。 なお、ファイル保存の際UTF8を利用する場合は「BOMなし」の 設定にすることを忘れずに
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問