2012-11-20 29 views
1

有這個問題。我知道在互聯網上有很多這樣的問題,但他們似乎都沒有爲我做的伎倆:(不同頁面的PHP會話

所以我打算在網站上做一個adminpanel。你通過通過登錄進入屏幕上,當名稱+密碼正確時,會話被創建,在其他的管理頁面上,我將測試該會話是否已設置,通過這個我會知道用戶是否可以訪問該頁面或不是。 PHP(simplyfied)

<?php session_start(); ?> <html ... 

然後大量的控制後

if ($adminpwd == $pass) { 
    session_regenerate_id(); 
    $_SESSION["mysessionname"] = $name; 
    $tijd = date('H:i:s', strtotime('+ 30 minutes')); 
    $_SESSION["E4A_einde"] = $tijd; 
    session_write_close(); 
echo "<script type='text/javascript'>window.location = 'myotheradminpage'</script>"; 
} 

我的其他PHP頁面包括這個腳本

<?php session_start(); 
if (!isset($_SESSION["mysessionname"])) { 

session_destroy(); 
echo '<SCRIPT LANGUAGE="JavaScript"> window.alert("no session found") </SCRIPT>'; 
echo "<script type='text/javascript'>window.location = 'myloginpage'</script>"; 
     } 

與此元素,如果會話未設置有一個重定向,如果會話設置PHP頁面上的其他代碼西港島線觸發。

但事實是,每一次我重新導向到我的登錄頁面。所以我的會議沒有設置:■無法弄清楚爲什麼所以請幫助我。

我嘗試了很多變薄與每個頁面上添加在session_start()梅索德,我試圖重新生成會話ID之前,我設置的會議,但沒有任何工程..

+0

@ Mr.Alien'javascript' – itachi

+0

@itachi我有PHP的眼睛...大聲笑只是看到並刪除了我的評論 –

+1

看[header](http://php.net/manual/en/function.header .php)有一種在服務器端重定向的方法。 – itachi

回答

1

在初始session_start前HTML,請嘗試設置:

<?php session_start(); 
$_SESSION["mysessionname"]; ?> 
<html ... 

這將在任何運行之前聲明您的會話變量。

讓我知道這是否工作。

+1

'php'不需要這個過程。 – itachi

+0

也沒有工作 – Kevinc

+0

我將此設置爲最佳答案。我在我的頁面中也有一個<!DOCTYPE html PUBLIC「規則,並且這個規則是在php session_start之前設置的,所以我在技術上把phprule設置在html之前,但是還是..謝謝所有的建議,你也是itachi! – Kevinc

0

刪除session_regenerate_id。它發送另一個cookie,但輸出已經發送。

也可以撥打電話session_write_close。無論如何,它會在腳本的末尾發生,這種微型優化對代碼庫的質量有負面影響。如果您遇到併發問題,請與memcached會話商店聯繫,但您距離那裏很遠。

也放棄session_destroy電話。如果他沒有被授權,那麼他沒有被授權。這裏的邏輯建議清除已經空的會話。

+0

erm ....在登錄後重新生成會話ID應該是鼓勵的。不鼓勵。 – itachi

+0

對每個請求的再生可能會受到鼓勵,否則它只會帶來一點目的。 – Alex