真的很煩人的問題我無法解決/只能部分解決。不錯的多汁給你的專業人士。重定向後PHP會話丟失
我已經設置了一個基本的登錄系統。就像這樣:
的login.php:
- 線1:
session_start();
- 檢查
if($_SESSION['logged_in'] == true) header("Location: /controls.php);
,櫃面他們已經進入了他們的詳細資料。 - 如果他們沒有進入他們的是,用戶輸入的憑據,如果有效:
$_SESSION['logged_in'] = true;
- 後數據庫憑證進行檢查,並會被設置爲true,重定向考慮使用PHP
header("Location: /controls.php);
承受,會話現在已設置。
Controls.php
- 線1:
session_start();
- 線2:
if($_SESSION['logged_in'] != true) {header("Location: /index.php");}
瞬間我得到採取的index.php僅適用於Chrome和Firefox。
此外,我有accounttools.php
,其中會議再次需要。一旦我嘗試訪問accounttools.php
,會話將被銷燬/取消設置,並且任何嘗試加載accounttools.php
的結果都會導致標題重定向到我的/index.php頁面,而且僅在FIREFOX和CHROME中。
我也得添加一些東西。如果我回到login.php
並重新登錄,一切正常,會話設置正確。這是基於瀏覽器的錯誤嗎? PHP在任何數據被髮送到瀏覽器之前執行,那麼如果這些瀏覽器在任何事情到達用戶的時候已經被執行了,那麼這些瀏覽器如何行動呢?
登錄文件:
// Login.php
<?php session_start();
if($_SESSION['logged_in'] == true)
{
header("Location: /controls.php");
exit();
}
if($_POST['username_login'] && $_POST['password_login'])
{
// Do necessary database work to check credentials (edited out here).
// ...
// Check re-hashed pass against database hash (password checking)
if($make_password == $current_user[0]['password'])
{
// If this is OK login is a success.
$_SESSION['logged_in'] = true;
header("Location: /controls.php");
exit();
}
}
?>
控制文件:
// controls.php
// This page instantly redirects to index.php
<?php session_start();
// Go to homepage if logging out.
if($_POST['logging_out'])
{
unset($_SESSION['logged_in']);
header("Location: /index.php");
exit();
}
// No access unless logged in.
// This session seems to no longer exist at this point. Why??
if($_SESSION['logged_in'] != true)
{
header("Location: /index.php");
exit();
}
?>
編輯:我發現別的東西:如果我登錄並手動輸入$_SESSION
-restricted頁面的URL,該$_SESSION
不被破壞。
有一部分header()重定向導致$_SESSION
在Google和Mozilla中未被設置/銷燬。
我也一直在谷歌搜索瘋狂,顯然這是PHP編碼器之間的共同問題。有人必須知道這是什麼?
有兩個問題:1)你爲什麼要在你的'session_start()'之後關閉並打開你的PHP標記,2)在你的登錄頁面上,爲什麼當你只使用'Location'時輸出腳本來重定向?頭?我假設你在第400行之前有一些輸出,但這也沒什麼意義,因爲你的登錄檢查應該在腳本的開始處是正確的。 – SenorAmor 2012-07-12 01:20:14
他們都看起來像相對重定向,但我不得不問 - 你在HTTP和HTTPS之間彈跳嗎?你沒有在域名之間移動(甚至是www。到非www)。你還沒有禁用cookies? – 2012-07-12 01:21:13
John C:我沒有在HTTP和HTTPS之間切換,它們都在同一個域和同一個目錄中。 SenoAmor:我不知道我爲什麼這麼做,是一個複製/粘貼工作。我現在修改了我的login.php文件以使用PHP中的header()重定向,並將登錄檢查移至文件的開頭。但是,我仍然失去了兩頁之間的會話。 – George88 2012-07-12 01:32:49