レンタルサーバでセッションが使えない原因と解決方法

このQ&Aのポイント
  • レンタルサーバを使用している際に、セッションが使えたり使えなかったりする問題について調べました。セッションが使えなくなる原因として、サーバのメモリ不足が考えられます。共用のレンタルサーバでは、他のユーザーとメモリが競合することがあります。セッションが使えなくなると、PHPSESSIDがNULLになります。解決方法として、session.save_pathを変更し、サーバの領域ではなく、お客様の領域にセッションを保存するように設定することが挙げられます。
  • レンタルサーバを使用している際にセッションが使えなくなる原因として、サーバのメモリ不足が考えられます。共用のレンタルサーバでは、他のユーザーとメモリが競合することがあります。セッションが使えなくなると、PHPSESSIDがNULLになります。解決方法としては、session.save_pathを変更することが挙げられます。初期設定では、セッションはサーバのシステム領域に保存されますが、お客様領域に保存するよう設定を変更することで、定期的にクリアされることがなくなります。
  • レンタルサーバを使用している際にセッションが使えなくなる原因として、サーバのメモリ不足が考えられます。共用のレンタルサーバでは、他のユーザーとメモリが競合することがあります。セッションが使えなくなると、PHPSESSIDがNULLになります。解決方法としては、session.save_pathを変更することが挙げられます。初期設定では、セッションはサーバのシステム領域に保存されますが、お客様領域に保存するよう設定を変更することで、セッションがクリアされることがなくなります。
回答を見る
  • ベストアンサー

セッションが使えたり使えなかったりする

レンタルサーバを使用しているのですが、セッションが使えたり使えなかったりします。 使えなくなるとPHPSESSIDはNULLになります。 これは何が原因なのでしょうか? 共用のレンタルサーバなので、サーバのメモリが足らずに保存しきれていないのかなと推測してレンタルサーバに問い合わせたところ、以下のような返答が来ました。 /**********************************************/ SESSIONは初期の設定では、サーバーのシステム領域に保存されます。 しかし、定期的にクリアされますので、お客さま領域内に保存されるよう 変更していただきお試しいただけますでしょうか。 session.save_pathを変更する場合には、 設定を変更したいディレクトリ内にphp.iniファイルを 設置していただくことで該当ディレクトリのみ設定が有効になります。 設定が反映されているかはphpinfoにて確認が可能です。 なお、設定を有効にしたいディレクトリが複数ある場合には 各ディレクトリにてphp.iniファイルを設置してください。 また、php.iniの記述方法に関してはご案内していないため 参考書籍やWebサイト等にてご確認ください。 /**********************************************/ session.save_pathを変更すると何ができるんでしょう? この「セッションが使えない」という問題はクライアント側で解決できることなのでしょうか?

  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
回答No.1

session.save_pathは、セッションの情報をサーバー側でどのディレクトリに保存するのかを設定する項目です。デフォルトだと/tmp等、サーバー全体で共有する領域に保存されるのですが、共用サーバーですのでいちユーザーがこれを使い尽くしてしまうとまずいですから定期的にクリアしているのでしょうね。 php.iniを各ディレクトリにという具体的な内容と、そのphp.iniにはsession.save_pathだけ書けばいいのか、通常のphp.iniに書く事全部書かなければならないのかはわからないのですが、session.save_pathは.htaccessでも変更は可能なようなので php_value session.save_path "ディレクトリ名" の1行を.htaccessに追加してあげたらいいと思います。ディレクトリ名ですが、自分のディレクトリの中にtmp等の名前のディレクトリを作って、パーミッションを777にしてあげれば良いと思います。 セッションが使える使えないですが、このケースではクライアントは関係ないと思います。セッションの設定によっては、cookieが使えないとダメとかSSLの時だけとか、そんな設定もできます。詳しくは参考ページを見て下さい。

参考URL:
http://www.php.net/manual/ja/ref.session.php
sakai3
質問者

お礼

なるほど。 セッションデータの保存フォルダを自分用に設定すれば他に影響されなくてすむわけですね。 ありがとうございます!

関連するQ&A

  • セッションについての設定なのですが・・。

    すいません。今さくらのレンタルサーバーで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の設置しているディレクトリに自前のphp.iniを置けば反映されるらしいです セッション切れの時間をのばす方法を教えてください(自前でphp.iniを作る方法を教えてください) サーバーのphpinfo確認したら session.cookie_lifetime 0 0 session.gc_maxlifetime 1440 1440 になっていました 自前のphp.iniにsession.gc_maxlifetime = 3600と一行だけ記述するだけでできますか? それとも、php.iniにxamppにあるような設定をワラワラ書かないといけませんか? php.iniのパーミッションは何にしたほうがいいでしょうか?見えるとまずいですよね? よろしくお願いします  

    • ベストアンサー
    • PHP
  • セッションを利用するための設定

    PHP初心者です。設定で意味がわからなくて質問させてもらいます。 バージョンはphp5を使用しています。 本を見ながら勉強しているのですが、セッションを利用するための設定としてphp.iniの session.use_trans_sid=on session.save_path=任意のディレクトリ に変更するとあるのですが、この任意のディレクトリは自分で新たに作成するのでしょうか?また、どこに作成するべきなのでしょうか? それと、php.iniの中を検索するとsession.save_path=という行がいくつか出てきますが、どの行を直せばいいのでしょうか? 初歩すぎて、ネットで検索してもヒットしなくて、ご存知の方よろしくお願いします。

    • 締切済み
    • PHP
  • PHPがセーフモードの時のセッションについて

    PHPがセーフモードであるレンタルサーバーに、自作したPHPスクリプトをアップロード後実行してみました。 そのスクリプトはセッションでログイン管理をしているのですが Warning: session_start() [function.session-start]: SAFE MODE Restriction in effect.The script whose uid is 1046 is not allowed to access /var/tmp/ owned by uid 0... Fatal error: session_start() [<a href='function.session-start'>function.session-start</a>]: Failed to initialize storage module: files (path: )... というエラーが出てしまいます。 マニュアルのセーフモードで制限される関数の説明に “デフォルトの files session.save_handler を使う場合は、スクリプトのオーナーが session.save_path ディレクトリのオーナーと同じでなければなりません。” という説明があったので、session.save_pathをスクリプト内のディレクトリ(FTPから新しく作成)に変更してみたところ上記エラーは消え、 CookieにPHPSESSIDが保存されていました。が、ログインが出来ません。 試しにセッションでログイン管理をしている自作ではないスクリプトを設置してみたのですが、これもログインが出来ませんでした。 細かいところは違うんですが、どちらもセッションに保存されたパスワードをチェックしてログイン状態を判別しています。 なので、セッションに値が保存されない(書き込みできない?)という状態なのだと思うんですが、よくわかりません。 session.save_pathを変更するだけではダメなんでしょうか? 原因・解決策のほかに、セーフモードにひっかからない組み方というか、セーフモード対策のようなものがあれば教えて頂きたいです。よろしくお願いします。 ※そのサーバーはphp5スクリプトはcgiモードとして扱われます。 ※.htaccessは次のようになっています(コントロールパネルで作成されたもの) Options +ExecCGI AddHandler cgi-script .cgi .pl AddHandler x-httpd-php5 .php SuPHP_ConfigPath /usr/home/hogehoge/scriptname

    • 締切済み
    • PHP
  • セッションファイルの場所

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

    • ベストアンサー
    • PHP
  • セッションの仕組み

    php初心者です セッションの仕組みを教えてください 質問1 セッションidとセッションクッキーは同じものですか? 質問2 セッションidやセッションクッキーはデフォルトでは、ブラウザを閉じた時に削除されますか? 質問3 レンタルサーバーのphp.iniを調べてみたところ 保存場所がsession.save_path no valueでした。この場合、訪問者のパソコンにクッキーが保存されてしまうのでしょうか?サーバーに保存する方法はありますか? 質問3 session_start();でセッションを開始したときセッションidが自動で付けられるのはわかりましたが、 セッションid(MD5で作られた数字)の使い道がわかりません 質問4 セッションidはどこに利用すればいいのでしょうか? session_start(); session_id(); //このセッションidの利用方法がわかりません $_SESSION['id'] = $_POST['id']; よろしくお願いします

    • ベストアンサー
    • PHP
  • レンタルサーバーのセッション管理について

    無料で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
  • セッション変数について

    48歳独学でプログラムを勉強しているものです。誰も教えてくれる人がいないので、教えてgooさんには大変お世話になっております。 現在PHPを使用して無料レンタルサーバーに会員画面を作ろうとしているのですが、一般的に無料レンタルサーバーでもセッション変数は使えるものなのでしょうか。どうも上手くセッション変数がフォルダに保存されません。無料レンタルサーバーでは不可なのでしょうか。 セッション保存先に「kaiintmp」というフォルダを作成しています。 そして、 session_start(); session_save_path("kaiintmp"); session_register("simei","pass"); $_SESSION[simei]=$simei; $_SESSION[pass]=$pass; のようにしていますが・・・。 自分のパソコンでは、セッション変数が作成されますがレンタルサーバーにUPしても作成されません。 レンタルサーバーにUPしたときのpathがダメなのでしょうか? レンタルサーバーでセッション変数を使用されている方おりましたら宜しくご教授お願いいたします。

    • ベストアンサー
    • PHP
  • session.nameについて

    PHPのセッションの設定についての質問です。 セッションの値がPHPSESSIDだと長いので、短くしようと思い、 ini_set("session.name", "sid"); と設定しました。 設定を確認すべく、<?=session_name()?> で表示すると、ちゃんと sid となっているのですが、 <?=SID?> でセッションと一緒に表示すると、なぜか PHPSESSID=XXXXXXXXXXXXXXXXXXXXXXX というふうに、名前が変わってくれません。 実際には、リンクの後ろに自動でセッションが付く 機能(session.use_trans_sid ですかね)を利用 したいので、自動でセッションをリンクにつけて 表示しているのですが、その際にもやはり、元のまま PHPSESSIDと表示されてしまう状況です。 ※ちなみに、php.ini はいじれないので、PHPファイル  の冒頭で、ini_setをしている状況です。 どなたか解決策をご存知の方がいましたら、教えて いただけますか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションファイルが見つからない

    XAMPP1.7.2をWindowsXPにインストールして、PHPの勉強をしています。 セッション機能を使っていますが、php.iniの設定ではsession.save_path = "C:\xampp\tmp"なので、tmpフォルダにセッションファイルができはずですが、どこにも見当たりません。セッション機能は普通に使えます。 セッションファイルはどこにいるんでしょうか、ご教授願います。

    • 締切済み
    • PHP

専門家に質問してみよう