• ベストアンサー

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

無料で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

  • PHP
  • 回答数5
  • ありがとう数7

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

  • ベストアンサー
  • 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

  • さくらサーバーでsessionが使えません。

    題名の通りなのですが、さくらのレンタルサーバープレミアムを使っているのですが、 セッションがまったく動きません。 phpを勉強をし始めたばかりでプログラムはあまり詳しくなく初心者サイトを見ながらウェブサイトを 作っていたのですが・・。 以前は動いたのですが、一年ぶりくらいにphpでサイトを作っている最中に気がつきました。 サーバーの仕様が変更になったのでしょうか・・。 xamppをインストールをしてローカル環境で試した所ちゃんとsessionは動いています。 アップロードすると動きません。(変数の受け取りができません) formで値を送ったりは問題ないのですがsessionが動かないため非常に困っています。 プログラムに問題はなく、ググっても解決できません。 <?php phpinfo(); ?> でセッションは下記のような状況になっていますが、私ではまったくわからず、session.save_pathを明示的に 示さなければならない、などちらほら見かけますがよくわかりません。 どしたら動くのでしょうか・・。 Session Support enabled Registered save handlers files user Registered serializer handlers php php_binary Directive Local Value Master Value session.auto_start Off Off session.cache_expire 180 180 session.cache_limiter nocache nocache session.cookie_domain no value no value session.cookie_httponly Off Off session.cookie_lifetime 0 0 session.cookie_path / / session.cookie_secure Off Off session.entropy_file /dev/urandom /dev/urandom session.entropy_length 32 32 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 no value no value session.serialize_handler php php session.upload_progress.cleanup On On session.upload_progress.enabled On On session.upload_progress.freq 1% 1% session.upload_progress.min_freq 1 1 session.upload_progress.name PHP_SESSION_UPLOAD_PROGRESS PHP_SESSION_UPLOAD_PROGRESS session.upload_progress.prefix upload_progress_ upload_progress_ session.use_cookies On On session.use_only_cookies On On session.use_trans_sid 0 0

    • 締切済み
    • PHP
  • session(PHP)が表示されない。

    sessionを理解するために簡単な例文を入力して sessionを呼び出そうとしました。 しかしできません。文法上は本のCDを丸写しなので 問題ないと思います。 設定(php.ini)で何か確認する場所があればお願いします。 Windows XP Apache 1.3.27 PHP 4.3.1 session.auto_start Off Off session.bug_compat_42 On On 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_dividend 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler 0 0 session.save_path /tmp /tmp session.serialize_handler php php session.use_cookies On On session.use_only_cookies Off Off session.use_trans_sid On On

    • ベストアンサー
    • PHP
  • セッションの変数の受渡しについて

    よろしくお願いします。 セッションを利用して変数受渡しを行おうと思い、初めての試み なので簡単なものを作ってやってみたのですが、変数に値をセットしたtest.phpでは値が表示されますが、リンク先のtest2.phpでは表示されません。 以下のソースで試しています。 -------------------------------------------------- test.php <?php session_start(); session_register("aa"); $_SESSION['aa'] = 1234; print $_SESSION['aa']; print "<p>"; print "<a href='test2.php'>next</a>";←ここの画面では表示されます。 ?> test2.php <?php session_start(); print $_SESSION['aa'];←表示されません ?> ---------------------------------------------- 想定では画面に”1234”と出ると思っていたんですが・・。 他質問をみて真似て色々試したのですが、やはり表示できませんでした。 環境は以下です apache2 php ver4.4.4 session Session Support enabled Registered save handlers files user Directive Local Value Master Value session.auto_start Off Off session.bug_compat_42 On On 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 100 100 session.gc_maxlifetime 1440 1440 session.gc_probability 1 1 session.name PHPSESSID PHPSESSID session.referer_check no value no value session.save_handler files files session.save_path c:\windows\Temp c:\windows\Temp session.serialize_handler php php session.use_cookies Off Off session.use_only_cookies On On session.use_trans_sid On On 環境の問題でしょうか?各ブラウザで試したのですが、ダメでした。 初歩的質問で申し訳ありませんが、ご教示よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションが変数が取得できません

    こんにちは。初心者で大変申し訳ないのですが、2日間悩みましたがどうしても解決できないため質問させて頂きました。どうかご教授下さい。 PHPのセッション機能の利用をしようと以下のような環境でテストスクリプトを実行したのですが、うまくいきません。 PHPバージョン4.3.10 register_globals On session.auto_start Off session.bug_compat_42 On session.bug_compat_warn On session.cache_expire 180 session.cache_limiter nocache session.cookie_domain no value session.cookie_lifetime 0 session.cookie_path / session.cookie_secure Off session.entropy_file no value no session.entropy_length 0 session.gc_divisor 100 session.gc_maxlifetime 1440 session.gc_probability 1 session.name PHPSESSID session.referer_check no value session.save_handler files session.save_path /tmp session.serialize_handler php session.use_cookies Off session.use_only_cookies Off session.use_trans_sid On SESSION登録側スクリプト <?php session_start(); $_SESSION['tarou'] = 50; ?> <a href="test.php">test</a> 結果表示側スクリプト <?php session_start(); echo($_SESSION['tarou']); ?> session.use_trans_sid Onで透過的にURIにセッションIDを埋め込むタイプで、 セッションファイル自体は作られているのですが セッション変数は登録されておらず、空のセッションファイルとなってしまっています。 色々と調べてみたのですがどうしても解決できません。 大変お手数ですがどうか宜しくお願い致します。

    • ベストアンサー
    • PHP
  • クッキー名が変わってしまう

    セッション管理でクッキーを使用しています。 setcookie("ABCID" , $ABCID, time() + 1440); というようにクッキー名を決めているのですが、 ある環境だと名前が変わって取得できません。 var_dump($_COOKIE)で確認すると windows(ローカル)では、IE・Firefox共に array(2) { ["PHPSESSID"]=> string(26) "q3jsuelppgapa425lmtmhgf222" ["ABCID"]=> string(26) "q3jsuelppgapa425lmtmhgf222" } それに対してLinuxサーバにアップして確認すると(win)IEでは array(1) { ["0850256NQ"]=> string(26) "xdxppwkpdxtrcepaaaw&00a224" } というように設定した覚えのない名前が表示されます。 Firefoxでは問題なく取得できます。 php.iniの設定なのか、まったく予測ができなく困っています。 お力をお貸しください。 php5 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_httponly Off Off session.cookie_lifetime 60 60 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 /tmp /tmp session.serialize_handler php php session.use_cookies On On session.use_only_cookies On On session.use_trans_sid 0 0 ini_set('session.save_handler', 'user');

    • ベストアンサー
    • PHP
  • セッションの有効期限

    Linux7.2 + PHP4.2(DSO版)+ Apacheを使用しセッション管理を使用した認証機能を制作しています。 session.cache_expire = 180としているのに ログイン後20分くらいでセッションが切れる現象が生じています。 プログラム上では特別なことはしていません。 session_start(); session_cache_limiter('nocache'); を先頭に書いているだけです。 以下、php.iniのセッション関連の設定です。 どなた方この現象についてご存知でしたら教えて下さい。 宜しくお願いします。 session_auto session.save_handler = files session.save_path = /tmp session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.gc_probability = 1 session.gc_maxlifetime = 1440 session.referer_check = session.entropy_length = 0 session.entropy_file = ;session.entropy_length = 16 ;session.entropy_file = /dev/urandom session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0

    • 締切済み
    • PHP
  • 困ってます。phpセッションについて

    phpセッションについて教えてください。 既にwebサーバで動いているシステムがあります。 改修する必要があるため、パソコンの仮想サーバ(XAMPP)で動かした所、セッションに関わる部分がうまくいきません。 ●保存してる箇所 session_start(); session_regenerate_id( TRUE ); $_SESSION['xxx'] = $xxx; ●呼び出している箇所 session_start(); session_regenerate_id( TRUE ); if ( !isset( $_SESSION['xxx']) ) { //←ココでひっかかります //終了するための処理 exit; } $xxx = $_SESSION['xxx']; ************** 設定に関する部分です。 ●「.htaccess」の設定は以下のようにしています。 php_flag session.use_cookies On php_value session.cookie_lifetime 0 php_flag session.use_trans_sid Off php_value session.gc_maxlifetime 3600 php_value session.save_path 'C:temp' 'C:temp'に保存されたデータはありますので、書き出しはうまくいってるようです。 呼び出しがうまくいってません。 ソースの session_start(); session_regenerate_id( TRUE ); の直後に var_dump($_SESSION['xxx']); で値を参照するとNULLです。 ●「php.ini」のセッションの箇所は以下のようになっています。 session.save_handler = files よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッション内容が化ける?

    PHP初心者です。 次の環境で一種のグループウェアを開発しました。 OS: RedHat Linux9.0 Web Server: Apache2.0.10 DB: PostgresSQL 7.4.2 PHP4.2.2 「ある社員が、ログインしたまま会議に出席し数時間後に戻ってみると、 画面内容が別の社員のものになっている」 という不可解な報告がありました。 調べてみるとログイン時のポータル画面は変化していないのですが、そこから 画面を切り替えて明細表示すると、社員名称が別の社員になっているのです。 しかも明細内容は何も表示されていません。 セッションで取得した内容が化けているのではないかと思っているのですが、 知識不足で行き詰まっています。 php.ini の設定は次のようになっています。(defaultだと思われます) session.save_handler = files session.use_cookies = 1 session.name = PHPSESSID session.auto_start = 0 session.cookie_lifetime = 0 session.cookie_path = / session.cookie_domain = session.serialize_handler = php session.gc_probability = 1 session.gc_divisor = 100 session.gc_maxlifetime = 1440 session.bug_compat_42 = 1 session.bug_compat_warn = 1 session.referer_check = session.entropy_length = 0 session.entropy_file = session.cache_limiter = nocache session.cache_expire = 180 session.use_trans_sid = 0 原因と対処法が分かる方、どうか教えてください。

    • 締切済み
    • PHP
  • セッションについての設定なのですが・・。

    すいません。今さくらのレンタルサーバーでphpをアップロードしたのですが、 セッションがまったく動きません。 XAMPPのローカル環境では動いていますのでプログラムには間違いは無いのですが、 私はphpプログラムを組むのも初めてなもので原因をググっていました。 するとあるウェブサイトにさくらのレンタルサーバーで同様の症状に陥ったとのブログが ありまして、さくらはsession.save_pathを明示的に指定しなければセッションが使えないとの 内容でした。 ( <?phpinfo()?>で設定状況を調べました所session.save_pathはno valueでした) 恐らく自分と同じ症状なのでパスを指定すれば解決すると思うのですが、 さくらのphp.iniはロリポップやエックスサーバーとは違いラジオボタンやチェックボックスでの php.ini設定は一切できず、何も記載されていないテキストボックスがあるだけです。 私は今までローカル環境でしかphpをさわった事がないためphp.iniの設定の仕方が全く わかりません。 どなたかsession.save_pathを指定する方法教えてもらえませんか? (下の例を見てもよくわかりません。何かファイルを作ってアップロードするのでしょうか??) サイトにあった解決方法 ---------------------------------------------------------------------------------- php.iniにてsession.save_pathを明示的に指定(例:/home/user/tmp) ← 以前はno valueだった 指定したディレクトリに書き込み権限を与える

    • ベストアンサー
    • PHP
  • セッションファイルの場所

    php.ini内の記述を見ると、windowsでセッションを使用するためには、session.save_pathパスを設定しなければならない、となっているのですが、これを設定しないまま、現状、セッションが使用できています。 できれば、現状のまま使用していきたいのですが、どこか知らないところでファイルが生成されているのも気持ち悪く、セッションファイルの保存先を探したのですが、見当たりませんでした。C:\tmp等のフォルダもありません。 セッションファイルはどこに保存されているのでしょうか。 環境はwindows 2000+php5です。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう