サポート » 使い方全般 » セッションを保持できません。

  • 解決済 so-taro

    (@so-taro)


    同じドメイン内のWordPressとPHPファイルとの間でセッションを保持しようとしているのですが、保持できません。

    WordPressのテンプレートファイルで任意のセッションに変数を保持し、こちらを参照して、ページ内のフォームアクションで同じドメイン内のphpファイルに移動したところ、任意のセッションの変数が保持できていませんでした。

    ただし、ワードプレス用のセッションは保持されていました。

    Array ( [wp-settings-1] => editor=html [wp-settings-time-1] =>・・・

    PHPのバージョンは5.3.3となります。
    どうぞよろしくお願いいたします。

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • ただし、ワードプレス用のセッションは保持されていました。

    Array ( [wp-settings-1] => editor=html [wp-settings-time-1] =>・・・

    こちらワードプレスのクッキーでした。確認不足で失礼しました。

    クッキーにも変数を持たせてみたのですが、遷移先の画面で保持されませんでした。
    ワードプレス→phpファイルの間でセッションやクッキーを消すような操作がなされているのでしょうか?
    引き続きよろしくお願いいたします。

    モデレーター Daisuke Takahashi

    (@extendwings)

    クッキーとセッションは別物ですので、まずはセッションについて。

    $_SESSION に値を格納したという解釈で正しいのであれば、これは完全にPHPの問題になってしまうので、ここでは詳しく書きませんが、サーバの設定によってはセッションは session_start() 等を利用して開始・再開しなければいけません。これはWPテンプレート側でも受信側のPHPでも同じことです。おそらくこれで解決するのではないかと思います。

    クッキーとセッションの関係ですが、 session_start() 等によって生成されたセッションIDはクッキーを使ってクライアント(ブラウザ)に自動的に保存されますので、正しくセッションが開始できていれば、 PHPSESSID という名前のクッキーが追加されているかと思います。

    クッキーの値が保持できないというのは様々な可能性が多すぎるため、当該のフォームを実際に見てみないと、何とも言えません。

    ご連絡ありがとうございます!
    セッションの保持ですが、以下を実施してもできませんでした。
    ショッピングカートのプラグイン(welcart)を利用しているのですが、そのセッション内容も保持できていませんでした。
    他に考えられることはありますか?

    【実施内容】
     ・php側でsession_start()の実施
     ・wordpress側でsession_start()の実施(こちらはfunctionに以下を記載しました。)

    /**
    * init_sessions()
    * @uses session_id()
    * @uses session_start()
    */
    function init_sessions() {
    if (!session_id()) {
    session_start();
    }
    }
    add_action(‘init’, ‘init_sessions’);

    【確認方法】
    print_r($_SESSION);
    print_r($_COOKIE);

    尚、クッキーの保持は、パスを指定することで解決できました。
    ※以下の”/”を追加しました。

    setcookie(‘id’,$id, 0,”/”);

    引き続きよろしくお願いします。

    モデレーター Daisuke Takahashi

    (@extendwings)

    PHPのエラーログに何かメッセージが出ていないでしょうか?
    session_start()をたたいてもセッションが正しく保持されていないのであれば、セッションの保存先に書き込み権限がないなどの状況が考えられます。

    PHPのエラーログは何もでていませんでした。
    現在の設定ですが以下のようになっています。

    セッションの保存先。

    session.save_path = “/home/アカウント名/ドメイン名/php/session”

    フォルダ構成とセッションはこのような形です。

    home
     -アカウント名
      -ドメイン名
       -php(701)
        -hoge.php
        -session(700)
       -wp-admin
       -wp-content
       -wp-include

    ワードプレスのヘッダー

    <?php
    session_start();
    $_SESSION['test_id'] = 10;
    print_r($_SESSION);
    get_header(); ?>

    ページ内で以下のようにphpファイルを読みに行っています。

    <form action="../php/hoge.php" method="post" name="myForm">
    お名前 <input id="name" type="text" name="name" />
    <input type="submit" value="確定" /></form>

    hoge.phpでセッションの内容を確認をしています。

    <?php
    session_start();
    print_r($_SESSION);
    ?>

    hoge.phpの表示ではArray ( )だけが表示されています。

    クッキーでは保持できたのですがどうしてもセッションで保持したいと思っています。
    引き続きよろしくお願い致します。

    モデレーター Daisuke Takahashi

    (@extendwings)

    可能性としては、session.cookie_pathを編集したりはしていないでしょうか。

    また、PHP 5.3.0はセッションが開始できなかったときに、session_start()の返り値としてFALSEを返します。
    var_dump(session_start());
    とすると、その結果でセッションが開始できているかどうかは判別できます。

    ご連絡ありがとうございます。
    var_dump(session_start());を使ってみたところセッションは開始されているようでbool(true)が返ってきました。
    またsession.cookie_pathはデフォルトのままでした。

    session.auto_start  Off  
    session.use_cookies  On  
    session.use_only_cookies  On  
    session.use_trans_sid  Off  
    session.name  PHPSESSID 
    session.cookie_lifetime  0 
    session.cookie_path  / 
    session.cookie_domain 

    以前報告させて頂いたようにパスを指定するとクッキーの保持ができたのですが、こういったこととセッションが保持できないことは何か関係があるのでしょうか?

    尚、クッキーの保持は、パスを指定することで解決できました。
    ※以下の”/”を追加しました。

    setcookie(‘id’,$id, 0,”/”);

    モデレーター Daisuke Takahashi

    (@extendwings)

    /home/{user}/{domain}/php/sessionにセッションの内容を記録したファイルは作成されていますか?正常にセッションが動作していれば作られていると思うのですが。

    確認したところ、ファイルが作成されていませんでした。
    以下のセッションのチェックを行ったところ、リロードすると数字が1つずつ増えているのですが、/home/{user}/{domain}/php/sessionには、ファイルが作成されていませんでした。
    他に設定を見直すところなどありますか?よろしくお願いします。

    <?php
    session_start();
    if (isset($_SESSION['count'])) {
        $_SESSION['count']++;
    } else {
        $_SESSION['count'] = 0;
    }
    echo $_SESSION['count'];
    ?>

    再度確認したところ、sessionのファイルは作成されていました。(違うディレクトリを確認していました。。。)

    改めてセッション情報を確認すると、WordpressからPHPファイルに移動する際にセッションファイルが新たに作成されていました。
    php.iniの設定が問題なのでしょうか?

    モデレーター Daisuke Takahashi

    (@extendwings)

    PHPのドキュメントに

    注意:
    クッキーに基づくセッションを使用している場合、ブラウザに何か出力を行う前に session_start() をコールする必要があります。

    という記述があるので、session_start()を呼び出すタイミングの問題かと思います。

    WordPress側でadd_action()を利用して、アクションフック”init”のタイミングでsession_start()を叩くように変更すれば解決できると思います。コードとしては最初に示されていたように

    function init_sessions() {
        if (!session_id()) {
            session_start();
        }
    }
    add_action('init', 'init_sessions');

    で問題ないかと思います。

    ご連絡ありがとうございます。
    functionでsession_start()の設定を行ってもだめでした。

    さすがに変だと思って、ショッピングカートのプラグイン(welcart)を外してセッションを確認したところ、きちんと保持されていました。。。

    Takahashiさんから教えていただいたおかげで、原因を突き止めることができました。
    今後は、Welcartコミュニティで質問してみようと思います。

    本当にありがとうございました!

    zilchr2

    (@zilchr2)

    Welcartを利用しながらセッションを保存する場合、投稿画面からショートコードでPHPを実行することで対応できます。(あまり需要がないと思いますが…)

    かちびとさんのこの記事で解決できました。
    http://kachibito.net/wordpress/php-file-include-post.html

    ありがとうございます。

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • トピック「セッションを保持できません。」には新たに返信することはできません。