Apache-2.2

會話變數在 PHP5/Apache2/Ubuntu12 中不持久

  • March 31, 2014

我有一個網站,它使用會話變數(在 PHP 中)來了解訪問者是否正在進入該網站。如果他是新來的,那麼我會將他重定向到檢測到的語言。但如果他不是新人,你可以讓他去任何他想去的地方(甚至是其他語言的頁面)。

問題是用於實現此目的的變數($_SESSION

$$ “knownvisitor” $$) 不是持久的。我已經在其他伺服器上測試了同一個網站,它工作得很好,所以我很確定這是一個會話配置問題。有問題的伺服器是帶有 Apache 2.2.22 和 PHP 5.3.10 的 Ubuntu Server 12.04.4。 會話儲存在“/var/lib/php5”中,我可以在那裡看到文件,但它們是空的。會話文件屬於“www-data”並具有以下權限“-rw——-”。另一方面,該目錄屬於“root”並具有這些權限“drwx-wx-wt”。

按照某些論壇的建議,我嘗試在重定向之前使用“session_write_close()”,但沒有成功。重定向就像“header(‘Location:

$$ URL $$’)”。 這是腳本的程式碼,以便您了解其基本行為。這是我在我的網路中所有文件的開頭放置的內容:

function detectedlang($availlangs)
{
// FUNCTION STUFF HERE TO FIND OUT WHICH IS THE LANGUAGE OF THE VISITOR
return $detectedlang;
}

session_start();

if (!isset($_SESSION["knownvisitor"]))
{
$detectedlang = detectedlang(array("en", "es"));
$_SESSION["knownvisitor"] = true;
header("Location: http://www.mysite.com/".$detectedlang);
}

您說的/var/lib/php5/session是擁有root並擁有權限drwx-wx-wt。這意味著所有使用者都可以寫入目錄,但只有 root 可以讀取。結果是 PHP 可以創建會話文件,但以後無法返回並讀取它們。這似乎是您的會話失敗的原因。

修復所有權和權限,以便www-data可以讀寫(rwx)。例如:

chgrp www-data /var/lib/php5/session
chmod g+rwx /var/lib/php5/session

引用自:https://serverfault.com/questions/585487