2016-08-04 80 views
6

我可以從子文件夾訪問我的SESSIONS,例如。 /老師,/我的網站上的學生,但不是直接在/下的文件。PHP SESSION僅在子文件夾中可用

我的設置:

我上面的網頁:

session_set_cookie_params(time()+86400000, '/', '.mysite.com', 0, 1); 
    ini_set('session.use_only_cookies', 1); 
    if(!isset($_SESSION)) 
    { 
     session_start(); 
    } 

我怎麼設置我的會議

session_regenerate_id(true); 
$_SESSION['signature'] = $signature; 

我的php.ini

session.save_path = '/home/mysite/cvsessions' 

什麼我收到錯誤?

+0

兩個建議:如果你想有一個特定的域名在開頭省略。對於更多域使用通配符並在域名之前添加*。進一步嘗試添加/ behnd域。所以你的第一行看起來像:「session_set_cookie_params(time()+ 86400000,'/','mysite.com/',0,1);」也有你試圖調用這個函數BEFORE session_start();據我所知這是推薦的訂單 – JRsz

+0

你的會話設置cookie參數應該直接放到你的'php.ini'文件中。在您的自定義php.ini文件中是否有其他與會話相關的設置?d您是否在每個目錄中都有一個php.ini,或者它是否是整個域帳戶的'.ini'文件? – Martin

+0

@JRsz我將執行並恢復。 –

回答

7

澄清:這個答案是關於使用在包含以PHP文件相同的文件夾中的php.ini文件覆蓋全系統的默認設置,這個答案假定你已經有一個標準的默認php.ini文件,你的設置你不能或不應該編輯。

我有類似的問題,你描述和而你可能只能實際具有ONE php.ini文件會大膽地猜測你沒有php.ini文件中的每個活動的文件夾,你的根文件夾,因此任何子文件夾(/students等)都不使用根目錄php.ini,並且僅使用帳戶或系統默認值

根據您設置的服務器系統(例如CPanel安裝?),然後爲了從默認服務器範圍php.ini更改設置,一個新的php.ini文件只包含自定義設置(例如在您的個案賬戶特定會話存儲位置)需要安裝到需要使用非默認php.ini設置的目錄

所以,一步一步:

  • 你有每個文件夾中一個php.ini,如//teachers/students等?

  • 所有這些php.ini文件是一樣的嗎?

  • 所有的文件夾應該是相同的,所以所有應該有他們自己的php.ini副本或他們都不應該。否則,在一個(自定義)php.ini設置和另一個(系統默認)php.ini設置之間進行更改時,會導致導致不一致問題的行爲變化。

如果任何文件夾丟失他們或prehaps只有你的公共html文件的根文件夾具有php.ini文件則意味着所有其他文件夾使用的是默認,因此公衆HTML根在尋找會議錯誤的地方 - 它在尋找'/home/mysite/cvsessions'地址,而PHP會話的默認地址類似於/home/tmp

這是幫助還是這個標誌?

PHP> = 5.4

if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 

對於PHP <版本5.4.0

if(session_id() == '') { 
    session_start(); 
} 

:如果會話開始檢查


更好的辦法藪RCE:https://stackoverflow.com/a/18542272/3536236

+0

如果您的php安裝使用多個phl.ini文件,並且不需要它們,那麼您的php安裝有一些問題。 – symcbean

+0

這是CPanel工作的方式,有一個默認的php.ini文件,然後爲某個帳戶對默認的php.ini進行更改,只包含經過調整的設置的php.ini文件保存到帳戶域中的每個文件夾。也許我應該澄清這一點..... @symcbean – Martin

+0

例如,會話文件存儲的例子是賬戶特定的,所以這不是在默認的php.ini中設置(在我的情況下),它覆蓋了很多賬戶,所以需要設置一個帳戶的基礎上。雖然並不是每個文件夾都需要更改設置的副本的最主意,但是... – Martin

0

你好,請通過代碼

$lifetime=time()+86400000; 
session_start(); 
setcookie(session_name(),session_id(),$lifetime,'/', '.mysite.com'); 
+0

我添加了setcookie,但它沒有工作 –

+0

你試過什麼代碼請分享? –

+0

您是否確定在發送任何內容之前使用'setcookie()'?即從結尾塊(如'?>'到流的任何'echo')沒有空格 –

0

燮更改設置,並開始嘗試診斷問題。

沒有什麼在你提供的指向原因的信息。您的第一步是創建一個簡單的腳本,如下所示:

<?php 
error_reporting(E_ALL); 
session_start(); 
$_SESSION['visits'][]=$_SERVER['PHP_SELF']; 
print "<pre>" . var_export($_SESSION['visits'],true) 
    . "</pre><br />" . session_name() . "\n<br />" . 
    ini_get('session.save_path'); 

然後將腳本複製到每個目錄。

訪問的URL對每個部署的實例,檢查該會話名稱亙古不變的變化並報告任何錯誤。

最有可能的錯誤是在你的代碼 - 這是發射體的內容調用之前在session_start()(因此沖洗頭)或會話保存路徑正在某處覆蓋。

相關問題