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

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

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

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

Q&A

解決済

1回答

3515閲覧

リロードしただけで代入したsessionが消えてしまう

sanset

総合スコア186

PHP

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

0グッド

2クリップ

投稿2019/01/21 01:56

編集2019/01/21 02:30

以前まで問題なく動いていたsessionが、急にページ遷移するだけで値がリセットされるようになりました。

PHP

1<?php 2session_start(); 3 4echo session_id()."<br>"; 5$_SESSION['hoge'] = 'hoge'; 6 7print_r($_SESSION); 8 9exit;

これの結果は

xxxxxxxxxxxxxxxxxxxxxx(session_id名)
Array ( [hoge] => hoge )

ですが、代入をコメントアウトしてリロードすると、

PHP

1<?php 2session_start(); 3 4echo session_id()."<br>"; 5//$_SESSION['hoge'] = 'hoge'; 6 7print_r($_SESSION); 8 9exit;

xxxxxxxxxxxxxxxxxxxxxx(session_id名(↑と同一))
Array ( )

となってしまうようになりました。
今まではブラウザを閉じる以外は保持されていたものが消えてしまいます。
特にプログラムの変更も、サーバー内の設定ファイルも変更したなどの心当たりがないのですが、どの辺の設定を見直すべきなのでしょうか。

ログイン情報のIDを保持するためにSESSIONにIDを代入していたのですが、上記の現象のためログイン状態を維持できていません。
PHPの設定でsession.cookie_lifetimeは0となっていますので、ブラウザを閉じたらsessionは終了するのですが、リロードでは以前までは保持されていましたので、以前と同じ仕様に戻したいのです。
PHPのバージョンは5.6.40です。

どなたかご教示お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

再現しないですね。
色々やっているうちに単にgc_maxlifetimeがきて回収されただけではないでしょうか?

投稿2019/01/21 02:16

m.ts10806

総合スコア80765

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

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

sanset

2019/01/21 02:22

ありがとうございます。 確認しましたところ、session.gc_maxlifetimeは1440(デフォルト)でした。 最初のプログラムを実行した直後(数秒以内)にコメントアウトして実行しても代入されていないので、gc_maxlifetimeによる破棄ではないと思われます。
m.ts10806

2019/01/21 02:24

うーんなるほど そもそも何を目指すかで対応方法も検討が必要なので、phpのバージョンと前提や背景、ゴールを質問本文に記載してください
sanset

2019/01/21 02:36

ありがとうございます。文末に追記いたしました。
m.ts10806

2019/01/21 02:59

session.save_pathの場所にセッションファイルはきちんと作られていますか? おそらくセッションIDと同じ名前のファイルのはずです。 念のため「保持できていたとき」「リロードしたとき」で前後でファイルの更新時間と中身を確認してみてください。
sanset

2019/01/21 06:00

session.save_pathを確認したところ、デフォルトの"/var/lib/php/session"ではないことが分かりました。他の担当者に確認したところ、メモリを分散させるmemcachedというシステムが止まっており、sessionが保存されていませんでした。可能性を提示して頂けたことで原因が分かりました。ありがとうございます。
m.ts10806

2019/01/21 06:02

解決されたようで何よりです。 memcachedはまた別途入れるものなのでそれはそれで環境情報としてご提示いただいた方が余計な手間が減ると思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問