Apache / PHP में सत्र फ़ाइलों के लिए स्थान


81

Ubuntu 10.10 पर Apache / PHP की स्थापना पर सत्र फ़ाइलों का डिफ़ॉल्ट स्थान क्या है?


12
बस के साथ एक पृष्ठ करते हैं <?php phpinfo() ?>और के लिए देखो session.save_path
prodigitalson

1
आम तौर पर / tmp (IIRC) लेकिन सत्र के लिए अपने php.ini की जाँच करें। save_path
मार्क बेकर

जवाबों:


79

डिफ़ॉल्ट session.save_path पर सेट है ""जो आपके सिस्टम के अस्थायी निर्देशिका के लिए मूल्यांकन करेंगे। इस टिप्पणी को https://bugs.php.net/bug.php?id=26757 पर देखें :

आगामी releaess (sic) में save_path के लिए नया डिफ़ॉल्ट खाली स्ट्रिंग होगा, जिसके कारण अस्थायी निर्देशिका की जांच की जाएगी।

आप अस्थायी फ़ाइलों के लिए उपयोग की जाने वाली निर्देशिका पथ को वापस करने के लिए उपयोग कर सकते हैंsys_get_temp_dir

वर्तमान सत्र सेव पथ को खोजने के लिए , आप उपयोग कर सकते हैं

इस जवाब का संदर्भ लें कि अस्थायी फ़ंक्शन क्या है जब यह फ़ंक्शन खाली स्ट्रिंग देता है।


68
और कमांड लाइन से बस php -r 'echo session_save_path (), "\ n";'
रिचर्ड अयोटे

उबंटू 10.10 के तहत स्थान निर्धारित है और 'डिफ़ॉल्ट' नहीं है। PHP का एक साफ निर्माण आपको यह दे सकता है, लेकिन मेरे द्वारा उपयोग किए गए किसी भी डेबियन / उबंटू बिल्ड के तहत नहीं। मूल प्रश्न उबंटू 10.10 से संबंधित है। इसलिए, इसे केवल अंतिम टिप्पणी (या मेरे उत्तर) पर कमांड लाइन पर देखें क्योंकि स्थान 'डिफॉल्ट' / रिक्त / tmp से भिन्न हो सकता है जो कि लिनक्स वितरण पर निर्भर करता है ..
bshea

4
चेतावनी !! मुझे लगता है कि php -r 'echo session_save_path (), "\ n";' जैसा कि ऊपर बताया गया है कि एक अलग php.ini फ़ाइल (शायद /etc/php/7.0/cli/php.ini के बजाय /etc/php/7.0/apache2/php.ini) का उपयोग किया जाएगा, और इसलिए इसका एक अलग मान हो सकता है " session.save_path "
मैगमैटिक

@ मैग्मैटिक सही है, TWO php.iniफाइलें हैं, php_info()आपको बताएंगे कि मौजूदा इवैल्यू के दौरान कौन सा उपयोग में है, और locate php.iniक्या आप उन्हें खोजने में मदद करेंगे
जोनाथन

कृपया ध्यान दें (पिछले 2 टिप्पणियों के अनुसार): CLI PHP संस्करण (कमांड लाइन) का उपयोग डिस्ट्रो और संकलन के आधार पर अलग-अलग परिणाम उत्पन्न कर सकता है। मुख्य बात यह है कि यह अपाचे संस्करण नहीं है। (हालांकि INI फाइलें सत्र पथों के समान हो सकती हैं)। बेहतर दिखने के लिए / grep उचित Apache PHP.INI।
बशि

69

पहले session.save_pathउपयोग करने के मूल्य की जाँच करें ini_get('session.save_path')या phpinfo()। यदि वह गैर-रिक्त है, तो यह दिखाएगा कि सत्र फ़ाइलों को कहाँ सहेजा गया है। कई स्थितियों में यह डिफ़ॉल्ट रूप से खाली होता है, जिस स्थिति में यह पढ़ा जाता है:

उबंटू या डेबियन मशीनों पर, यदि session.save_pathसेट नहीं किया जाता है, तो सत्र फ़ाइलों को सहेजा जाता है /var/lib/php5

RHEL और CentOS सिस्टम पर, यदि session.save_pathसेट नहीं किया गया है, तो सत्र फ़ाइलों को सहेजा जाएगा/var/lib/php/session

मुझे लगता है कि यदि आप PHP को स्रोत से संकलित करते हैं, तो जब session.save_pathसेट नहीं किया जाता है , तो सत्र फ़ाइलों को सहेजा जाएगा /tmp(हालांकि मैंने खुद इसका परीक्षण नहीं किया है)।


1
मैं Ubuntu 12.04.5 LTS का उपयोग कर रहा हूं और किसी कारण से (मैंने कुछ भी नहीं बदला है php.ini) मेरे सत्र चल रहे हैं/var/lib/php5/sessions
फेलिप

"सेट नहीं"? यह सेट है - लेकिन php.ini में टिप्पणी की गई है। इसका मतलब यह नहीं है कि इसका कोई मूल्य नहीं है या 'सेट' नहीं है .. कमांड लाइन से बस ऐसा करें: php -i | grep session.save_pathCLI (और शायद अपाचे) सत्र पथ के लिए। इसके अलावा, एक दिया php.iniसामान्य रूप से 'डिफ़ॉल्ट' पथ दिखाएगा - यह सिर्फ टिप्पणी की गई है।
13

और हाँ: यदि डिफ़ॉल्ट पथ के रूप में संकलित कुछ भी नहीं (अधिकांश वितरण के मामले में नहीं), तो एक रिक्त का उपयोग किया जाएगा (संकलन डिफ़ॉल्ट)। जो तब सिस्टम टेम्प क्षेत्र (सामान्य रूप से /tmp) के रूप में इसके फॉलबैक / डिफॉल्ट मान का उपयोग करेगा। कृपया php.net/manual/en/…
bshea

@bshea, "सेट नहीं" से मेरा मतलब खाली स्ट्रिंग
रिच

DEFAULT Ubuntu 16.04: /etc/php/7.0/*/php.ini-> ;session.save_path = "/var/lib/php/sessions"- एक टिप्पणी का मतलब यह नहीं है कि 'सेट नहीं है' यह सब मेरा मतलब है। यह स्पष्ट रूप से 'रिक्त' (/ tmp) के अलावा किसी और चीज़ पर सेट है .. और एक खाली / अशक्त स्ट्रिंग नहीं है
bshea

16

यदि संकलित डिफ़ॉल्ट के लिए अनिश्चित है session.save_path, तो प्रासंगिक को देखें php.ini
आम तौर पर, यह टिप्पणी को डिफ़ॉल्ट मान दिखाएगा।

उबंटू / डेबियन पुराने / नए php.iniस्थान:
अपाचे के साथ /etc/php5/apache2/php.ini
पुराने php5 : NGINX + FPM के साथ पुराने php5:/etc/php5/fpm/php.ini
उबंटू के साथ Ubuntu 16+: /etc/php/*/apache2/php.ini*
Ubuntu 16+ NGINX + FPM के साथ - /etc/php/*/fpm/php.ini*

* /*/ : मौजूदा PHP संस्करण (ओं) को सिस्टम पर संस्थापित किया गया है।

Apache के तहत उपयोग में PHP संस्करण दिखाने के लिए :

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

7.3

चूंकि PHP 7.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"


या, "cli" वातावरण का उपयोग कर मान को हथियाने के लिए PHP का उपयोग करें ( नोट देखें) नीचे देखें):

$ 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

ध्यान दें:

php.ini सामान्य रूप से 'cli' (कमांड लाइन) संस्करण में Apache2 / FPM संस्करण (कम से कम जहाँ तक ) के रूप में एक ही डिफ़ॉल्ट मान हैं session.save_path। आप वेब सर्वर की वर्तमान PHP मॉड्यूल सेटिंग्स को एक वेबपृष्ठ पर गूँजने के लिए एक समान कमांड का उपयोग कर सकते हैं और जानकारी को हथियाने के लिए wget / कर्ल का उपयोग कर सकते हैं। वहाँ कई पदों हैं के बारे में phpinfo()इस संबंध में उपयोग। लेकिन, यह सिर्फ PHP इंटरफ़ेस या उपयोग करने के लिए तेज हैgrep लिए इसके लिए सही php.iniहै कि यह डिफ़ॉल्ट मान है।

EDIT: प्रति @aesede टिप्पणी -> जोड़ा गया php -i। धन्यवाद


8
सिर्फ FYI करें आप php -iphpinfo () समकक्ष पाने के लिए CLI में कर सकते हैं
aesede

15

इसके अलावा एक अन्य सामान्य डिफ़ॉल्ट स्थान /tmp/है/var/lib/php5/


कैसे / var / lib / php5 / कभी भी लिखने योग्य नहीं है और उसे chmodding / chowning की आवश्यकता है। क्या PHP को उस सत्र स्थान को सेट नहीं करना चाहिए जो डिफ़ॉल्ट रूप से लिखने योग्य है?
CMCDragonkai

2
मुझे लगता है कि यह साझा किए गए मेजबानों पर ऐसा है, अन्य लोग लोगों के सत्रों को हाइजैक करने का प्रयास नहीं कर सकते। यानी, सत्र को "उपयोगकर्ता नाम: व्यवस्थापक" कहते हुए लिखें और एक मनमाना सत्र आईडी सेट करें, फिर उस पर PHPSESSID सेट करें। एक बहुत आसान हो जाएगा एक साझा मेजबान वातावरण पर Drupal या Wordpress की तरह कुछ का उपयोग करने के लिए। (यह आपको बस व्यवस्थापक खाते के रूप में लॉग इन करेगा)
मैटिसडाडा

4

मुझे एक ही सत्र में सत्र के लिए सही रास्ता खोजने में एक ही परेशानी थी। सब सब में, मुझे पता चला कि सीएलआई पीएचपी में अपाचे मॉड्यूल की तुलना में एक अलग अस्थायी निर्देशिका है: अपाचे का उपयोग किया जाता है /var/tmp, जबकि सीएलआई कुछ ऐसा है /var/folders/kf/hk_dyn7s2z9bh7y_j59cmb3m0000gn/T। लेकिन दोनों तरह से, खाली sys_get_temp_dir()होने पर मुझे सही रास्ता मिला session.save_path। PHP 5.5.4 का उपयोग करना।


1

उपर्युक्त में से किसी ने PHP 7.2 के साथ CentOS 7 के लिए 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 फ़ंक्शन की जाँच करें, हालांकि यह सत्र। Save_path को कहीं न कहीं कहना चाहिए।


हालाँकि, PHP डॉक्स का कहना है कि "/ tmp" डिफ़ॉल्ट है, मैंने जो भी linux distros की कोशिश की है, वह सत्र फाइलों को नहीं डालती है /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 इत्यादि अक्सर प्रत्येक वेबसाइट को सत्र फ़ाइलों के साथ अपनी निर्देशिका देने के लिए इसे अनुकूलित करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.