昨天我搜索了幾乎所有關於php會話的主題,我查看了手冊,但仍然無法正常工作。因爲這個,我熬夜很晚。即使會話ID正確,PHP會話也是空的
情景是:我使用標準的HTML表單登錄。我的會話中填充了一些變量,它工作正常。然後我使用閃存uploadify
上傳一些照片,並通過參數 - PHPSESSID
。我的PHP腳本不識別會話。它認爲它是空的。然後我嘗試使用不同客戶端的會話,例如Firefox
或Opera
,並且它也是空的。然後我嘗試使用不同的Chrome
選項卡和它的工作
正如你看到我唯一的保護是通過IP。我不掃描其他的事情,所以當好PHPSESSID傳遞也不管客戶端類型,版本等
這是init_session.php
,文件的客戶端IP是匹配我包括其他文件開始時每次這個應該工作。因此我知道會話ID正在通過Flash傳遞。但是然後會話是空的。
目錄設置在頂部,路徑是直接的,所以不應該有任何問題。當保存路徑爲默認時,它也不起作用。我也轉向會話自動啓動和會話只使用cookie。除了我需要手動設置cookie之外,它沒有改變任何東西。
這裏有什麼我可以嘗試嗎?我想我沒有選擇。
編輯:
我忘了最importat件事,我認爲關閉suhosin.session.cryptua
將解決情況,但使用的ini_set我不能把它關掉,還有沒有其他的辦法嗎?看來,這個選項加密會話使用用戶代理字段將如此。
ini_set('session.auto_start', '0');
ini_set('session.save_path','/public_html/nowy/tmp');
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
} elseif (isset($_COOKIE['PHPSESSID'])) {
session_id($_COOKIE["PHPSESSID"]);
} elseif (isset($_GET["PHPSESSID"])) {
session_id($_GET["PHPSESSID"]);
}
session_start();
setcookie("PHPSESSID", session_id(), time()+3600, "/");
if (!isset($_SESSION['user'])) {
$_SESSION['user'] = 0;
}
if (!isset($_SESSION['initiate'])) {
session_regenerate_id();
$_SESSION['initiate'] = true;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
echo ini_get('session.save_path').'<br />';
echo $_POST["PHPSESSID"];
print_r($_SESSION);
議決
這個問題已經解決了。我無法設置cryptua
,因爲我需要複製oryginal php5.ini
並替換一些變量以使其正常工作。
的問題是預期suhosin.session.cryptua
呃......當你只關注技術上必要的基礎知識時,你能初始化一個會話嗎?如果是,則描述沒有所有霧的症狀,如果不是,則嘗試在另一個之後添加一個技術細節直到問題再次出現。 – Raffael
工作的正常請求和uploadify提出的請求之間有什麼區別?例如。你是通過相同的主機名/子域請求腳本嗎? – Frode
請參閱更新。我忘了提及,但主要的不同之處在於**用戶代理字段**,因爲其他瀏覽器也不工作 – Kaminari