2012-03-13 432 views
1

我正在登錄腳本,並按照誰登錄我重定向到的會話信息丟失

其中一個頁面。如果我直接到一個網頁,在主目錄中的所有正常工作下的目錄,但是,如果我直接瀏覽index.php文件所在目錄之上的頁面,會話信息似乎丟失了,並且要求用戶再次登錄

我知道我可以簡單地放置第二頁在主目錄,但下面的目錄,我想知道是否有可能維持會話信息引導到一個頁面主目錄上面時

用戶進入到一個名爲login.html的頁面,當他們有投入有信息,他們被送到的login.php,這其中,重定向發生

if ($username==$dbusername&&$password==$dbpassoword) 
{ 
    if($admin == "1"){ 
     header('location: http://www.edit.domain_name.co.uk/'); 
     $_SESSION['username']=$username; 
     $_SESSION['id']=$id; 

    }else{ 
     header('location: /member'); 
     $_SESSION['username']=$username; 
     $_SESSION['id']=$id; 
    } 
} 

我已經把session_start();之初每個用戶需要登錄才能訪問的頁面。任何投入將大大收到

的登錄腳本的完整代碼是

<?php 
session_start() ; 

$username = $_POST['username'] ; 
$password = $_POST['password'] ; 

################# ADMIN OR NOT ################################################### 

include_once "mysql/global.php"; 
$result = mysql_query("SELECT admin FROM users WHERE username = '$username'"); 
if (!$result) { 
    echo 'Could not run query: ' . mysql_error(); 
    exit; 
} 


$row = mysql_fetch_row($result); 

$admin = $row[0]; 


################# ############################################################### 

if ($username&&$password) 
{ 

include "mysql/global.php"; 

$query = mysql_query("SELECT * FROM users WHERE username='$username'") ; 

$numrows = mysql_num_rows($query) ; 

if ($numrows!=0) 
{ 

    while ($row = mysql_fetch_assoc($query)) 
    { 
     $dbusername = $row['username'] ; 
     $dbpassoword = $row["password"] ; 

    } 

    // check to see if they match! 
    if ($username==$dbusername&&$password==$dbpassoword) 
    { 
     if($admin == "1"){ 
      session_start(); 
      header('location: http://www.edit.domin_name.co.uk/admin'); 
      $_SESSION['username']=$username; 
      $_SESSION['id']=$id; 

     }else{ 
     session_start(); 
     header('location: /member'); 
     $_SESSION['username']=$username; 
     $_SESSION['id']=$id; 


     } 
    } 
    else 
     echo "<center>incorrect password!</center>" ; 

} 
else 
    die ("<center>That user does not exist!</center>") ; 


} 
else 
    echo ("<center>Please enter a username and password</center><br/>") ; 
    die ("<a href=\"index.php\"><center><b>Click here to try again</b></center></font>"); 


    ?> 
+0

題外話到你的問題,但你已經有了很多這樣的事情:''SELECT admin FROM users WHERE username ='$ username'「'。你真的想要使用準備好的語句或mysql_real_escape_string。 – 2012-03-13 21:14:01

回答

2

爲了加載會話,你必須在每一頁的頂部放置在session_start()。

另外,你需要將它們設置之前,重定向之前,調用session_start():

if ($username == $dbusername && $password == $dbpassoword) { 
    if($admin == "1"){ 
     session_start(); 
     $_SESSION['username']=$username; 
     $_SESSION['id']=$id; 
     header('Location: http://www.edit.domain_name.co.uk/'); 
    } 
    else { 
     session_start(); 
     $_SESSION['username']=$username; 
     $_SESSION['id']=$id; 
     header('Location: /member'); 
    } 
} 
+0

我把session_start();在用戶需要登錄訪問的每個頁面的開始處,我還將session_start();在login.php中 – 2012-03-13 18:26:03

+0

年初確保你之前每個$ _SESSION把在session_start()[?] =「」,並把header()函數在您設置的會話。查看我編輯的代碼。 – Anonymous 2012-03-13 18:31:09

+0

這仍然無法正常工作,它仍然要求我再次登錄 – 2012-03-13 18:47:14

0

​​

一開始,這是無效的。 Location標題後應跟一個完整的URL,而不是相對的URL。

Secondally,如果/member是一個目錄,並訪問www.example.com/member,阿帕奇很可能將您重定向到example.com/member/,加上斜槓和丟棄www.。遷移到其他域名可能會導致會話數據丟失。

+0

位置:標題不需要完整的網址。我每天只用文件名來使用它。另外,如果將htaccess文件配置爲刪除/ member後的斜槓,則不會更改。 – Anonymous 2012-03-13 18:37:44

+0

@BaileyMcAfee。 'Location'頭[應該採用絕對URI](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30)。瀏覽器通常使用相對URI很好,但Google網站管理員工具表明它更喜歡絕對URI(它們也混淆了[Web Sniffer](http://web-sniffer.net))。是的,是否放棄'www.''取決於Apache的配置。 – TRiG 2012-03-13 18:43:33