Apache / PHPでのセッションファイルの場所


81

Ubuntu10.10にApache / PHPをインストールした場合のセッションファイルのデフォルトの場所はどこですか?


12
でページを作成し<?php phpinfo() ?>、を探してくださいsession.save_path
prodigitalson 2011

1
通常は/ tmp(IIRC)ですが、php.iniでsession.save_pathを確認してください
Mark Ba​​ker

回答:


79

デフォルト値は session.save_pathに設定されている""システムのtempディレクトリに評価されます。https://bugs.php.net/bug.php?id=26757で次のように述べているこのコメントを参照してください

今後のリリース(原文のまま)でのsave_pathの新しいデフォルトは空の文字列になります。これにより、一時ディレクトリがプローブされます。

一時ファイルに使用されるディレクトリパスを返すために使用できsys_get_temp_dirます

現在のセッション保存パスを見つけるには、次を使用できます

この関数が空の文字列を返すときの一時パスを確認するには、この回答を参照しください。


68
そして、コマンドラインからphp -r'echo session_save_path()、 "\ n"; 'を実行するだけです。
リチャードアヨッテ2011

Ubuntu 10.10では、場所は「デフォルト」ではなく設定されています。PHPのクリーンビルドはこれを提供するかもしれませんが、私が使用したDebian / Ubuntuビルドではそうではありません。元の質問はUbuntu10.10に関係しています。だから、ちょうど場所として最後のコメント(あるいは私の答え)あたりのコマンドライン上でそれを見てすることは...使用のLinuxディストリビューションに応じて、「デフォルト」/空白/ tmpに異なることがあり
bshea

4
警告!!php -r'echo session_save_path()、 "\ n"; 'を実行していると思います 上記のように、異なるphp.iniファイル(おそらく/etc/php/7.0/apache2/php.iniの代わりに/etc/php/7.0/cli/php.ini)を使用するため、「」の値が異なる可能性があります。 session.save_path "
Magmatic 2018年

@Magmaticは正しいです。2つのphp.iniファイルがありphp_info()、現在の評価中にどちらが使用されているlocate php.iniかがわかり、それらを見つけるのに役立ちます
Jonathan

注意してください(最後の2つのコメントによる):CLI PHPバージョン(コマンドライン)を使用すると、ディストリビューションとコンパイルに応じて異なる結果が生成される可能性があります。主なことは、Apacheバージョンではないということです。(ただし、INIファイルはセッションパスに関しては同一である可能性があります)。適切なApachePHP.INIを調べて/ grepすることをお勧めします。
bshea

69

まず、またはをsession.save_path使用する値を確認します。空でない場合は、セッションファイルが保存されている場所が表示されます。多くのシナリオでは、デフォルトで空になっています。その場合は、以下をお読みください。ini_get('session.save_path')phpinfo()

UbuntuまたはDebianマシンでは、session.save_pathが設定されていない場合、セッションファイルはに保存され/var/lib/php5ます。

RHELおよびCentOSシステムでは、session.save_pathが設定されていない場合、セッションファイルはに保存されます。/var/lib/php/session

PHPをソースからコンパイルすると、session.save_pathが設定されていない場合、セッションファイルがに保存されると/tmp思います(私はこれを自分でテストしていません)。


1
私はUbuntu12.04.5 LTSを使用していphp.iniますが、何らかの理由で(何も変更していません)、セッションが終了しています/var/lib/php5/sessions
Felipe

"設定されていません"?設定されていますが、php.iniでコメントアウトされています。これは、値がない、または「設定」されていないことを意味するものではありません。コマンドラインからphp -i | grep session.save_path、CLI(およびおそらくApache)セッションの保存パスに対して次のようにします。また、指定php.iniされたものは通常、「デフォルト」パスを表示します-コメントアウトされているだけです。
bshea 2017

はい:デフォルトパスとしてコンパイルされたものがない場合(ほとんどのディストリビューションではそうではありません)、ブランクが使用されます(デフォルトでコンパイルされます)。次に、システムの一時領域(通常/tmp)をフォールバック/デフォルト値として使用します。php.net/manual/en/…を
bshea

@bshea、「設定されていない」とは、空の文字列に設定されていることを意味します
リッチ

デフォルトのUbuntu16.04:/etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"-コメントは「設定されていない」という意味ではありません。明らかに「空白」(/ tmp)以外に設定されており、空/ヌルの文字列ではありません
bshea 2017

16

のコンパイル済みデフォルトがわからない場合session.save_pathは、関連するを調べてくださいphp.ini
通常、これはコメントアウトされたデフォルト値を表示します。

Ubuntu / Debianの古い/新しいphp.ini場所:
Apacheを使用した/etc/php5/apache2/php.ini
古いphp5 :NGINX + FPMを使用した古いphp5 :Apacheを使用した/etc/php5/fpm/php.ini
Ubuntu 16 + :/etc/php/*/apache2/php.ini*
NGINX + FPMを使用したUbuntu16 +- /etc/php/*/fpm/php.ini*

* /*/=システムにインストールされている現在のPHPバージョン。

Apacheで使用されているPHPバージョンを表示するには:

$ a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+"

7.3

この例ではPHP7.3が実行されているバージョンであるため、これをphp.ini:に使用します。

$ grep "session.save_path" /etc/php/7.3/apache2/php.ini

;session.save_path = "/var/lib/php/sessions"

または、組み合わせたワンライナー:

$ APACHEPHPVER=$(a2query -m | grep "php" | grep -Eo "[0-9]+\.[0-9]+") \ && grep ";session.save_path" /etc/php/${APACHEPHPVER}/apache2/php.ini

結果:

;session.save_path = "/var/lib/php/sessions"


または、PHP自体を使用して、「cli」環境を使用して値を取得します(以下の注を参照)。

$ php -r 'echo session_save_path() . "\n";'
/var/lib/php/sessions
$

これらも機能します:

php -i | grep session.save_path

php -r 'echo phpinfo();' | grep session.save_path

注意:

の「cli」(コマンドライン)バージョンには、php.ini 通常、Apache2 / FPMバージョンと同じデフォルト値があります(少なくともsession.save_path)。同様のコマンドを使用して、Webサーバーの現在のPHPモジュール設定をWebページにエコーし、wget / curlを使用して情報を取得することもできます。この点での使用に関する多くの投稿がありますphpinfo()。ただし、PHPインターフェースを使用するか、PHPインターフェースをgrep正しく使用して、php.iniデフォルト値を表示する方が高速です。

編集:@aesedeコメントごと->追加php -i。ありがとう


8
参考php -iまでに、CLIで実行してphpinfo()と同等のものを取得できます。
aesede 2015年

15

他の一般的なデフォルトの場所/tmp//var/lib/php5/


なぜ/ var / lib / php5 /は書き込み可能ではなく、chmodding / chowningが必要なのですか。PHPは、デフォルトで書き込み可能なセッションの場所を設定するべきではありませんか?
CMCDragonkai 2014年

2
共有ホストでは、他の人が人のセッションを乗っ取ろうと試みることはできないと思います。つまり、「username:admin」と言ってセッションに書き込み、任意のセッションIDを設定してから、PHPSESSIDをそれに設定します。共有ホスト環境でDrupalやWordpressなどにアクセスするのは非常に簡単でした。(管理者アカウントとしてログインするだけです)
Mattisdada 2014

4

Macでのセッションの正しいパスを見つけるのにも同じ問題がありました。全体として、CLI PHPにはApacheモジュールとは異なる一時ディレクトリがあることがわかりました。Apacheはを使用しましたが/var/tmp、CLIはのようなものを使用していました/var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T。しかし、どちらの方法でも、が空のsys_get_temp_dir()ときに正しいパスを取得しましたsession.save_path。PHP5.5.4を使用します。


1

PHP7.2でCentOS7のIUSリポジトリを使用すると、上記のいずれも機能しませんでした。

php -v
> PHP 7.2.30 (cli) (built: Apr 19 2020 00:32:29) ( NTS )

php -r 'echo session_save_path(), "\n";
> 

php -r 'echo sys_get_temp_dir(), "\n";'
> /tmp

ただし、セッションは/tmpフォルダーではなく、フォルダーに保存されました/var/lib/php/mod_php/session/

ls /var/lib/php/mod_php/session/
> sess_3cebqoq314pcnc2jgqiu840h0k  sess_ck5dtaerol28fpctj6nutbn6fn  sess_i24lgt2v2l58op5kfmj1k6qb3h  sess_nek5q1alop8fkt84gliie91703
> sess_9ff74f4q5ihccnv6com2a8409t  sess_dvrt9fmfuolr8bqt9efdpcbj0d  sess_igdaksn26hm1s5nfvtjfb53pl7  sess_tgf5b7gkgno8kuvl966l9ce7nn

0

/ tmp /にあると思います。ただし、phpinfo関数を確認してください。どこかにsession.save_pathと表示されているはずです。


PHPのドキュメントには「/ tmp」がデフォルトであると記載されていますが、私が試したすべてのLinuxディストリビューションは、セッションファイルを配置していません/tmp-何か知っていますか?ソースからPHPをビルドする場合はそうですか?「session.save_path」が空の場合、ファイルの行き先を把握するのは難しい場合があります(したがって、この質問だと思います)
リッチ

0

現在のsession.save_path値を見つけるための唯一の確実なオプションはphpinfo()、セッションストレージディレクトリを見つけたい環境で常に確認することです。

理由:値をsession.save_pathオーバーライドするかphp.ini、実行時にini_set('session.save_path','/path/to/folder');。を使用して設定することにより、さまざまな変更が行われる可能性があります。たとえば、ISPConfig、PleskなどのWebサーバー管理パネルは、多くの場合、これを適応させて、各Webサイトにセッションファイルを含む独自のディレクトリを提供します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.