LoginSignup
magtaro
@magtaro (正雄 千代)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

サーバーによってセッション変数が消えてしまう

Q&AClosed

解決したいこと

さくらインタネットのレンタルサーバーが2つあり、両方に同じ2つのphpプログラムをアップロードして実行しました。

結果は下に見えるように、1つサーバーではセッション変数がa.phpからb.phpに渡りますが、もう1つのサーバーではa.phpでセットしたセッション変数がb.phpでは消えてしまいます。

消えてしまうサーバーのどこか原因かがわかりません。

発生している問題・エラー

a.php
Array ( [MC] => MC value [userid] => userid value )
となっている$_SESSIONが

b.php
Array ( [MC] => MC value [userid] => userid value )
となるサーバーと

b.php
Array ( )
となるサーバーがあります。

上の表示は、下にコードにあるようにechoで出したものです。

該当するソースコード

<?php
session_start();
$_SESSION['MC'] = 'MC value';
$_SESSION['userid'] = 'userid value';
header( "refresh:3;url=b.php");
echo 'a.php<BR>';
$w=print_r($_SESSION,true);echo($w);
exit;
?>

上のa.phpから次のb.phpを呼びます。

<?php
session_start();
echo 'b.php<BR>';
$w=print_r($_SESSION,true);echo($w);
exit;
?>

教えて欲しいこと

php.iniかどこかに違いがあるのだと思いますが、どこをどうすればよいのかわかりません。
セッション変数が消えてしまう原因の設定を教えて下さい。

よろしくお願いいたします。

0

2Answer

既にご存知の内容であれば恐縮ですが、一つの可能性として書かせて頂きます。

まず、サーバでセッションが開始されるとクライアント(ブラウザ)に対してセッションIDを保存したcookieが発行されます。そしてブラウザから次のリクエストを送る際にサーバにそのcookieを送信し、サーバ側ではcookieに保存されたセッションIDを使ってセッションを特定します。

そして、php.iniのセッションの設定オプションにsession.cookie_secureというものがあります。
https://www.php.net/manual/ja/session.configuration.php#ini.session.cookie-secure

session.cookie_secure=onの場合、サーバで発行されるcookieのsecure属性がtrueになり、http接続ではcookieがサーバに送信されません。
https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies#Restrict_access_to_cookies

セッションIDを保存したcookieがサーバに送信されませんので、サーバ側ではセッションを特定することができず、新しいセッションを開始することになります。

もし、問題が発生しているサーバでphp.iniがsession.cookie_secure=onになっていて、httpでアクセスしているのであれば以下のいずれかを試してみては如何でしょうか?
session.cookie_secure=offにする
②httpsでアクセスする

0

Comments

  1. @magtaro

    Questioner
    phpinfoで調べるとsession.cookie_secureは0になっていました。
    session.cookie_secureを1にしても結果は同じでした。

    しかし、何故か不明ですが②の方法で上手く動きました。

    ありがとうございました。

レンタルサーバーを2つ使っているのですね。

/etc/php.ini
session.save_path = "/var/lib/php/session"

セッションの実体はそのwebサーバー内の/var/lib/php/session/にある
テキスト形式のファイルなので
そこがほかのサーバーと共有されていなければみれないかと思います。

0

Comments

  1. @magtaro

    Questioner
    質問のしかたが良くなくてすみません。

    2つのサーバーは独立してます。両方のサーバーに同じ2つのプログラムa.php, b.phpをアップロードして、それをそれぞれで実行しています。

    別のサーバーや別のドメインと共有することはしていません。
  2. @magtaro

    Questioner
    ありがとうございます。

    なるほど、とさっそく従ってやってみましたが、結果は駄目でした。
    フォルダを見ると、a.phpとb.phpで別のファイルができていました。
    これが同一のファイルを使うはずですよね。

    また、他にも情報ああったらお願いします。

Your answer might help someone💌