2015-03-03 49 views
2

當我們從beta測試服務器到我們活的服務器搬到我們的項目中,我們經歷了以下幾個:Session變量中的子目錄無法訪問

會話變量只訪問該文件訪問它們是在同一文件夾中的文件創造它們。我們的測試版服務器上並不是這種情況。所以,我創建了三個非常簡單的測試文件:

test.php的

<?php 
session_id("581186accf44d7e80df40d0b5a47fb7d"); 
session_start(); 
$_SESSION['myvariable'] = 'Hello World'; 
?> 
<html> 
    <body> 
     <p><a href="page2.php">Same folder test</a></p> 
     <p><a href="test/page2.php">Subfolder test</a></p> 
    </body> 
</html> 

然後,我們在同一個文件夾,並在測試/文件夾複製以下文件。

使page2.php

<?php 
session_start(); 
print 'Here is page two, my session variable and my session cookie: '; 
print $_SESSION['myvariable']; 
print $_COOKIE['PHPSESSID']; 
exit; 
?> 

和這裏的結果: 使page2.php

Here is page two, my session variable and my session cookie: Hello 
World581186accf44d7e80df40d0b5a47fb7d 

測試/使page2.php

Here is page two, my session variable and my session cookie: 581186accf44d7e80df40d0b5a47fb7d 

正如你所看到的,會話變量已經消失。但會話ID Cookie保存在子目錄中,因此它不是cookie問題。

我看過phpinfo()中的會話塊;除了在beta服務器上設置session.save_path而不是在活動服務器上(這可能意味着它將默認爲/ tmp),配置在兩者上都是相同的。

而且,我們沒有這可能會改變domain.com路徑www.domain.com路徑的.htaccess文件。

由於本次測試的工作我們的測試服務器上,我的結論是,這是一個PHP的配置問題,但如果有人可以點我向需要改變的參數,這將是非常感謝!

+1

是測試文件夾是在一個子域或類似的東西?如果是這樣,它不能閱讀會話cookie跨域,如果你在session_start之後移動session_id,那麼會發生什麼。 – mahen3d 2015-03-03 02:14:50

+0

我測試了這個代碼,在子文件夾中我也得到了正確的輸出 這裏是第二頁,我的會話變量和會話cookie:Hello World581186accf44d7e80df40d0b5a47fb7d – mahen3d 2015-03-03 02:19:23

+0

是的,正如我所說的,這也適用於我們的beta服務器,在現場服務器上。所以我的問題確實是:什麼PHP配置變量會阻止這些代碼的工作? – clayRay 2015-03-03 03:50:36

回答

0

這不應該發生 ...但確定。您可以嘗試一件事,在根中創建一個文件並將其包含在所有文件中。這樣你可以在該公共文件中運行session_start。

/common.php /file1.php (include common.php) /test/file2.php (include ../common.php - check paths and such)

,看看它是否還是會出錯。

+0

是的,仍然沒有工作。 感謝您的幫助,對不起,我需要這麼長時間才能找到您。與其他項目有偏差。 – clayRay 2015-07-21 02:11:32

1

好吧,看來發生的問題,部分是由於我缺乏的是什麼把我自己的php.ini中的public_html文件夾中會做的理解。 因爲我們不能我們共同的服務器上使用的ini_set()(這是禁用)我創建了一個包含以下行來覆蓋啞彈默認設置php.ini文件的本地副本...

date.timezone = Australia/Melbourne 
magic_quotes_gpc = Off 

我認爲這個本地版本的php.ini中的值將簡單地覆蓋主php.ini中的值。

不幸的是,這不是在Jumba/UberGlobal主機會發生什麼。 創建此本地php.ini表示整個配置恢復爲默認值,但這兩個設置除外。

該解決方案是爲Jumba/Uberglobal的技術製作其php.ini文件的副本(只更改上述兩個值)並將其放置在我們的public_html文件夾中。

這解決了這個問題。

感謝大家的幫忙!