2012-09-04 171 views
1

我從登錄頁面($ _SESSION ['login'])設置會話變量。我已經徹底測試過了,變量肯定正在創建,並且正在存儲的值正確($ _SESSION ['login'] ='1'),但該變量在下一頁使用Chrome,Opera或Firefox無法識別奇怪的是,相同的腳本在Safari和Internet Explorer中運行得如我所願。會話變量在IE和Safari中工作,但不是Chrome,Opera或Firefox?

任何幫助都將不勝感激 - 我一直試圖找出這一個一段時間,只是不能得到它 - 我在這裏完全損失。

這裏是一步一步 -

<?php 
// log in page 
// if logged in successfully set the session variable 

session_start(); 

if (// log in credentials good) { 
    $_SESSION['login'] = '1'; 
    header('location:inside_page.php'); 

    // echo $_SESSION['login'] ; 
    // ---------------------- 
    // commenting out the redirect and echoing 
    // the session variable works as expected 
    // in IE, Safari, Chrome, Opera and Firefox 
} 

?> 

這裏是我的Check_login類 - 它獲得的下頁(inside_page.php)實例 -

類:

<?php 

if (! defined('EXT')){ exit('Invalid file request'); } 

class Check_login { 
    private $login = null ; 

    function __construct() { 
     session_start(); 
     $this->login = $_SESSION['login']; 
     if ($this->login != '1') { 
      header('location:../index.php'); 
     } 

     // $login = $this->login ; 
     // echo $login ; 
     // $session = $_SESSION['login']; 
     // echo $session ; 
     // ---------------------- 
     // commenting out the redirect and echoing the 
     // session variable shows 1 in IE and Safari, but 
     // empty in Chrome, Opera and Firefox 
    } 

} 

?> 

頁( inside_page.php):

<?php 

require('../lib/Check_login.php'); 

session_start(); 

$login = new Check_login; 

?> 

再一次,任何幫助都是非常棒的。謝謝!

回答

3

我想通了 - 我不能說我明白爲什麼這是事實,但這是解決我的問題。在我的登錄頁面中,驗證登錄憑證後,我將會話變量'login'設置爲1,然後明確重定向到另一個頁面。經過測試,我意識到使用相對URL進行重定向可以解決問題。

我原來的職位甚至沒有說明URL,因爲我不認爲這是必要的,但這裏的地方,問題是 -

<?php 
// log in page 
// if logged in successfully set the session variable 

session_start(); 

if (// log in credentials good) { 
    $_SESSION['login'] = '1'; 
    header('location:https://www.somedomain.com/inside_page.php'); // *** PROBLEM 
} 

?> 

通過相對設置的位置,我的問題就走了 -

<?php 
// log in page 
// if logged in successfully set the session variable 

session_start(); 

if (// log in credentials good) { 
    $_SESSION['login'] = '1'; 
    header('location:inside_page.php'); // *** FIX 
} 

?> 

我仔細檢查,安全連接絕對不是問題,它是顯式的URL。

使用相對位置我的會話變量顯示在Internet Explorer,Safari,Chrome,Opera和Firefox的下一頁中。使用它在IE和Safari中顯示的明確位置,但不在CHROME,OPERA和FIREFOX中。

您可以輕鬆地重新創建,並親身體驗 -

<?php 

// ------- page_one.php ------- 

session_start(); 

$_SESSION['val'] = '1'; 

header("location:http://www.somedomain.com/page_two.php") ; 
// header("location:page_two.php") ; 

?> 

<?php 

// ------- page_two.php ------- 

session_start(); 

if ($_SESSION['login'] != '1') { 
    echo 'false' ; 
} else { 
    echo 'true' ; 
} 

?> 

希望這樣可以節省別人的一段時間(和頭痛)。

0

在inside_page.php中將session_start()移動到您的require語句上方。

會話應該在腳本的開始處啓動,幾乎總是在包含之前啓動。

+0

<:( - 未解決問題。謝謝,雖然! – canoebrain

+0

@canoebrain您是否使用Cookie?並且這是您當前的整個腳本? –

+0

不,我沒有發佈我的整個腳本,我實際上調用了一些類和其他事情,但我已經把它解釋成問題出現的地方。如果我創建一個頁面,設置我的會話變量等於1,然後重定向到我打電話給我的類的下一個頁面(這正是我正在使用的類)我有這個問題。我很想知道這是Chrome中的一些設置,但它也發生在Opera和Firefox中......哦,我根本沒有使用任何cookie。 – canoebrain

0

我有一個類似的問題,試圖將digitalaccesspass(DAP)集成到PHP5.5服務器上(打破所有Webkit/Blink瀏覽器,因此破壞Chrome,Safari和Opera的登錄)以及這些變化的星座。

  • 我確信在認證的第一行是session_start()
  • 我加session_write_close()所有重定向(header("Location:")調用)之前。
  • 重定向被編輯爲相對路徑,而不是絕對路徑。

對於人們通過谷歌碰到這個絆腳石,如果你打這個與DAP,使這些變化在/dap/authenticate.php

0

我的PHP會議也無法在Chrome工作。

我發現我的頁面之間沒有同步PHPSESSID的Cookie路徑,儘管每個頁面只使用session_start()來初始化每個會話。

添加此線之上session_start()在其上我寫數據到會話頁面解決了這個問題:

session_set_cookie_params(600, '/'); 

參見:

http://php.net/manual/en/function.session-set-cookie-params.php

相關問題