• ベストアンサー

レンタルサーバーのセッション管理について

無料でPHPを使えるレンタルサーバーでのセッション変数の使い方について教えていただきたく投稿いたしました。PHPインフォで調べてみますと、セッション変数は使える模様でした。セッション変数の保存先をsession_save_pathを使って自分のフォルダに変更しようとしているのですが、上手く行きませんでした。セッションに関する情報は下記の通りです。この中で/var/lib/php/sessionというパスがありますが、デフォルトの状態ではこのsessionというフォルダに保存されると思うのですが、レンタルサーバーですので多数の人が使っていますので、これを自分が作成した自分だけのフォルダに保存したいのですが、どうすればよいのでしょう。色々と試してみましたが上手く保存できませんでした。ちなみにセッションの保存先のパスのしていを、w7.oroti.com/~****/*****/sessionと言うようにしてみたり、指定されたファイルの置き場所がpublic_htmlというフォルダなので、 public_html/sessionとしてsessionフォルダを作ってみたり、したのですが保存できませんでした。詳しい方がおりましたら宜しくお願いいたします。セッションでの管理ができないので、クッキーで対応しております。でも、勉強のためになんとかこの課題を克服したいと思っています。宜しくお願いします。 <?php session_save_path("w7.oroti.com/~****/session"); session_start(); if(isset($_SESSION["cout"])){ $_SESSION{"count"]++; } else{ $_SESSION{"count"]=!; } ?> ------------------------------------------------------- session Session Support enabled Registered save handlers files user Registered serializer handlers php php_binary wddx Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 Off Off session.bug_compat_warn On On session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file no value no value session.entropy_length 0 0 session.gc_divisor 1000 1000 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.hash_bits_per_character 5 5 session.hash_function 0 0 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path /var/lib/php/session /var/lib/php/session session.serialize_handler php php session.use_cookies On On session.use_only_cookies Off Off session.use_trans_sid 0 0

質問者が選んだベストアンサー

  • ベストアンサー
  • tsaito
  • ベストアンサー率68% (17/25)
回答No.4

session_save_path()の場所は、 session_start()の前にしてください。 #ただ、最初の例示では、この順番になっているので #そこが原因ではないような気がしますが。

ityounomi
質問者

お礼

ありがとうございます。session_save_path()を、session_start()の前に持ってきました。でも、やはり^^・・・。見えません。 なんとなく、サーバー管理者がセキュリティー上間違って第3者に見られたりしないように、何か設定しているのかなという気がしてきているんですが・・・。サーバーさんはorotiさんです。

ityounomi
質問者

補足

皆様ありがとうございました。解決しました。 保存ファルダをtempに変えて実行してみたら、きちんと保存されていました。FFFTPでもファイルが確認できました。理由は分かりませんが、すっきりしました。ご教授してくださった皆様に感謝いたします。ありがとうございました。 <?php session_save_path("./temp"); session_start(); session_register("sesdata1"); $_SESSION[sesdata1]=10; print "session_save_path = " . session_save_path() . "<br>"; print $_SESSION[sesdata1]; if(isset($_SESSION[sesdata1])){ echo "格納済み"; } echo nl2br(shell_exec("ls -la ./session")); ?>

その他の回答 (4)

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.5

パーミッションは755とのことですが、これだと所有者しか書き込みできないですよね。実行ユーザが誰かによってはこれでは書き込めないです。 あと、FTPクライアントが最新の情報を取得できていない可能性もあるので、 echo nl2br(shell_exec("ls -la ./session")); とでもして、sessionディレクトリの内容を出力してみた方が良いかもしれません。 それから本題からはそれますが、エラーを出力するかどうかは自分で設定できます。 .htaccessでPHPの設定ができるならそこでdisplay_errors、error_reportingなどの値を設定してみてください。 .htaccessでの設定が無理ならばini_set()でも設定できることになっています。 http://jp.php.net/manual/ja/errorfunc.configuration.php http://jp.php.net/manual/ja/ini.php#ini.list

ityounomi
質問者

お礼

貴重がアドバイスありがとうございます!早々に手を入れてがんばって見ます。ありがとうございました。

ityounomi
質問者

補足

ありがとうございました。下の様に実行してみました。 <?php session_save_path("./session"); session_start(); session_register("sesdata1"); $_SESSION[sesdata1]=10; print "session_save_path = " . session_save_path() . "<br>"; print $_SESSION[sesdata1]; if(isset($_SESSION[sesdata1])){ echo "格納済み"; } echo nl2br(shell_exec("ls -la ./session")); ?> 実行結果の出力は session_save_path = ./session 10格納済みtotal 8 drwxrwxrwx 2 **** custom 4096 Sep 28 19:11 . drwxr-xr-x 3 **** custom 4096 Sep 28 15:56 .. -rw------- 1 apache apache 0 Sep 28 19:11 sess_t9gvcli1m0hdt7pkbf1u1pu8e5 となって、セッション変数は保存されていました。 デフォルトでは、session.save_path →/var/lib/php/session というパスになっています。もしかして、ここに保存されているような気がしています・・・。 フォルダのパーミッションは777にしました。 でも、FFFTPソフトでは見えないんです^^。 なんか、悔しいです。

  • tsaito
  • ベストアンサー率68% (17/25)
回答No.3

print "session_save_path = " . session_save_path() . "<br>"; を、スクリプトに組み込んで、session_save_pathが変更されているか確認をしてみてはいかがでしょう。 あと、No.2の方が回答されているように、セッション格納用のフォルダのパーミッションを確認してください。

ityounomi
質問者

お礼

ありがとうございます。 以下の様に実行してみました。 実行(1)session.php <?php session_start(); session_save_path("./session"); session_register("sesdata1"); $_SESSION[sesdata1]=10; print "session_save_path = " . session_save_path() . "<br>"; print $_SESSION[sesdata1]; ?> 実行(1)の表示結果 session_save_path = ./session 10 実行(2)test.php <?php session_start(); print $_SESSION[sesdata1]; ?> 実行(2)の表示結果 10 ということは、セッション変数は保存されて読み込まれている と言うことになると思うのですが・・・。 でも、FFFTPソフトで保存先のsessionフォルダを覗いてみても 何もファイルがありませんでした。 sessionフォルダのパーミッションは755で、書き込み、読み込み、実行とも全てOKになっています。 レンタルサーバーということでセキュリティー上表示されないのでしょうか?やはり、分かりません・・・。なぜ、見えないのかな^^。

  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.2

単純にパスの指定の仕方に誤りがあるのではないかと思います。 もしくはディレクトリのパーミッションに問題があるとかかもしれませんね。 何かエラーメッセ-ジは出ていませんか? エラーメッセージを出力しない設定になっているのならば出力するように設定して再度確認してみるのが良いと思います。 あとはパスの指定は絶対パスで、可能ならば.htaccessなどで設定しておくのがよいかと思います。セッションの保存先が複数あっても管理が煩雑になるだけでしょう。特別な理由があるのならばこの通りではありませんが。

ityounomi
質問者

お礼

ありがとうございます。エラーが表示されると良いのですが、無料のレンタルサーバーでエラーの表示設定がoffになっているので、エラーが表示されないんです。このエラーが表示されないことにより、かなり苦戦していました。単純なスペルミスを見つけるだけでも、いつも一苦労しています。

  • tsaito
  • ベストアンサー率68% (17/25)
回答No.1

session_save_pathの指定は、サーバ内の絶対パスか 相対パスを指定をしてください。 例えば、 session_save_path("./session"); とすれば、実行されるphpスクリプトと同階層にある sessionディレクトリの中に、セッションファイルが 作成されると思います。

ityounomi
質問者

お礼

ありがとうございました。試してみました。実行するPHPファイルと 同階層にsessionフォルダを作成して下記の様に書き換えたのですが、やはりセッション変数が保存されたファイルはありませんでした・・・・。自分のPCのローカル上でテストではきちんと保存されるのですが。レンタルサーバーではそれが上手くいきません。でも、PHPinfoではsession enableとなっていますし・・・。 どうしても、これがクリアーできないです^^。 <?php session_save_path("./session"); session_start(); if(isset($_SESSION["cout"])){ $_SESSION{"count"]++; } else{ $_SESSION{"count"]=!; } ?>

関連するQ&A

専門家に質問してみよう