2011-03-29 69 views

回答

4

設置會話cookie的路徑與session_set_cookie_params。當然session_start之前。

+0

嗨,我試過:session_set_cookie_params(60 * 60 * 24 * 5,「app1」,「xxx.com」);但它沒有工作。它只是停止加載其餘的PHP腳本。我是否需要在php.ini中編輯某些內容? – 2011-03-29 22:31:04

+0

...做到這一點:'session_set_cookie_params(60 * 60 * 24 * 5,「/ app1」);' – Neal 2011-03-29 22:35:55

+0

如果'停止加載',你確定你不只是造成語法錯誤?另外,在路徑中添加一個前導'/'。如果這不起作用,請在'session_start'之前嘗試'ini_set('session.cookie_path','/ app1')'。注意:除非你試圖對它做一些特殊的事情,否則你不必聲明這個域(第三個參數)。 – Wrikken 2011-03-29 22:36:41

0

u可以使用的想法,$_SESSION變種是一個數組:

$_SESSION['app1'] = ... 
$_SESSION['app2'] = ... //etc etc 
+0

是否有'-1'的原因? – Neal 2011-03-29 22:26:43

+0

我正在使用數組來存儲不同的會話,但它的session_id總是被設置爲相同的ID,無論文件夾如何。 – 2011-03-29 22:33:31

0

我不確定我是否正確理解問題,但是您可以嘗試檢查路徑以查看它是否在app1,app2等中,然後獲取您感興趣的字符串部分並使用該字符串設置會話,例如使用$_SERVER['REQUEST_URI']$_SERVER['SCRIPT_NAME']

除非你已經這樣做,你的問題是它不會設置會話?

2

如果/app1/app2包含完全無關的應用程序,你可以通過使用PHP的session_name(),實行功能上都完全不相關的會議。通常,會話使用名爲PHPSESSID的cookie。相反,在/app1中,您可以運行session_name('session_app_1')並在/app2中運行session_name('session_app_2')。現在這兩個應用程序中的會話將完全不相關。

警告: PHP的documentation說,session_name()函數是昂貴的。也許在會話中使用更加繁忙的應用程序中的默認名稱,並只在更安靜的應用程序中重命名它。

+0

'切換'session_name',這就解決了我的問題。我正在試驗兩個目錄,每個目錄都包含一個不同的應用程序,它們必須共享同一個會話。設置相同的會話保存路徑和相同的會話名稱。 – 2015-09-18 20:45:27

0

將session_save_path設置爲不同的目錄將用於您的目的。例如,您可以將其設置爲每個目錄中的子目錄,即。相對路徑。否則,共享目錄之間的會話將session_save_path設置爲相同的完整路徑。適用於我..