2012-12-16 44 views
1

我有一個簡單的腳本,用戶登錄。我試圖使用會話,以便用戶保持登錄在他通過網站瀏覽的任何頁面。PHP會話 - 登錄表單 - 無法登錄

我有這些腳本:

如果用戶登錄或登錄,'你現在登錄,$用戶應該被顯示,但默認「您還沒有登錄在。'在整個頁面中顯示。

沒有錯誤消息顯示,每當我改變頁面或嘗試登錄

最新的代碼版本可以在這裏找到:http://www.mediafire.com/?7n6qo3p4gpkaao4

誰能幫助嗎?

謝謝。

+0

您在使用多臺服務器使用一個負載平衡器?當我第一次開發一個帶有登錄的Web應用程序時,我遇到了一個問題,即登錄發生在一臺服務器上,但後來頁面加載到另一臺沒有會話數據的服務器上。我們在負載平衡器中配置了客戶端持久性來解決這個問題。 – Barmar

回答

0

我停在了這一點:

redirect('../TASK2PHP/upload.php'); 

那是什麼功能,它有什麼作用?

也許你的意思

+0

它在functions.php – Barmar

+0

中定義好了。在再次出發之前,我必須更深入地瞭解信息來源。 –

+0

它所做的就是'header('Location:'。$ page);',幾乎和你所期望的一樣。 – Barmar

1

我沒有清楚地看到你的問題是,太多的代碼閱讀,而是通過2檔(第2)我希望使用http_redirectheaderHttpResponse::redirect ...注意到一些可能成爲問題的東西: Session_id應該標識一個用戶。如果你只是簡單地輸入一個布爾值(真),我可以通過修改我的HTTP頭來輕鬆地在網站的用戶保留部分中斷。 第二件事是你在login.php上重定向之前,你回聲的東西....猜你不會看到任何東西....重定向發生在回聲之前。 第三件事是你應該定義哈希你得到和存儲的密碼。當人們訪問數據庫並且沒有任何所有人的密碼時都很難過。

最後一條建議:嘗試將Session_Start作爲每個文件中的第一條語句......可能是這樣。

2

形式行動= 「?OP =登錄」 方法= 「POST」 行動= 「login.php中」

爲什麼在形式使用動作兩次?

action =「login.php」是唯一需要的。

+0

我完全同意Theolodis說的 – Arunu

0

你在這裏。有很多錯誤。

http://www.2shared.com/file/A2V_Ztw8/login.html

這至少應該讓你開始。這也是一路評論。我沒有使用functions.php文件,那裏沒有什麼重要的。此外,當你使用這個相應地改變你的dbConfig文件。

+0

我也有一個註銷文件來註銷用戶會話。 – kadeempardue

+0

這給了我一個錯誤'注意:未定義的索引:用戶名在C:\ xampp \ htdocs \ Task2PHP \ final \ login.php在第36行 注意:未定義的索引:C:\ xampp \ htdocs \ Task2PHP \ final中的密碼\ login.php on line 37' on login – Brian

+0

是啊,您還沒有在數據庫中創建用戶。使用用戶名'abc'和密碼'123'創建一個用戶。確保數據庫表中的屬性(列)是'用戶名'和'密碼'。這些是它指的索引。 – kadeempardue

0

我已經編輯了index.php,login.php並設置了會話的工作流程。按照代碼結構相應地設置其他文件中的會話。 下載下面的登錄表單rar文件; https://www.box.com/s/1ie9ilp9jgluvokf6say

+0

我試過了這些文件,並對會話進行了修改,但是當我登錄頁面時'刷新'和'你沒有登錄'仍然出現。 – Brian

+0

你能告訴我你已經運行了哪個文件嗎? – mitesh

0

你的代碼登錄方法的結構看起來很混亂,它總是一個好主意,在你重定向之前呼應一切,否則httpresponse會抱怨它。此外,我的建議是,你首先打開錯誤報告,它始終是一個好主意,啓用錯誤報告開發。你可以在你的login.php裏面這樣做,只是把它放在文件的開頭。 error_reporting(E_ALL);或將E_ALL設置爲1 ini_set('display_errors','On');

5

session_start()放在每個文件的頁面頂部,你需要在<?php之後的會話,你應該沒問題。您需要在頁面上回顯任何實際html之前調用此函數。

閱讀PHP會話文件here

而且尋找到你的代碼,如果你想要限制用戶只能看到他是否登錄,然後創建一個名爲logincheck.php下面內容的新文件中的其他頁面,包括它每個文件的頂部按require_once("logincheck.php");。在這種情況下,不要像上面提到的那樣再次輸入session_start()代碼。現在

<?php 
session_start(); 
if(isset($_SESSION["username"])){ 
    $welcomeMsg = "<p align='right'>Welcome, </p>" .$_SESSION["username"]; 
}else{ 
    if(basename($_SERVER["PHP_SELF"])=="index.php") 
     $welcomeMsg = "You are not logged in"; 
    else 
     header("Location:index.php");//will redirect the user to index page if he has not logged in 
} 
?> 

u可以使用$welcomeMsg,任何地點呼應其頁面上其中u要顯示的錯誤味精。

希望能幫助回答您的問題。

+0

感謝您的回答。我照你說的做了,用index.php和files.php試了一下。每當我嘗試登錄它重定向到一個空白頁面(login.php)並沒有任何反應。 (ifset($ _ GET ['op'])){require_once(「login.php」); }?>' – Brian

+0

我試着弄了一下代碼..可以在這裏找到它:http://pastebin.com/DTzw16XP。我收到一條錯誤消息: '注意:會話已經開始 - 忽略第2行中的C:\ xampp \ htdocs \ Task2PHP \ final \ logincheck.php中的session_start() – Brian

+0

@Brian這就是我在答案中寫的如果包含logincheck.php文件,則不要在頁面頂部寫入session_start()。相反,請在頁面頂部包含logincheck.php,以便檢查用戶是否已登錄。請在此處查看。 http://pastebin.com/ND6jZVpR – LoneWOLFs

-1

我有固定的文件...

的主要問題是login.phploginUser功能。

改變這一行:

$sql = "SELECT * FROM users WHERE Username = '$username' AND Password = '$password'"; 

要這樣:

$sql = "SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'"; 

於第一線的問題是,它正在尋找文本「$用戶名」(和「$密碼」和不是變量$username$password

正如你所看到的解決方法是關閉字符串前後變量參考'

P.S.使用CodeIgniter這樣的框架來構建您的網站會大大增加您的收益,除了爲您節省大量時間修復此類錯誤之外,它也更加安全。

讓我知道你是否需要我上傳固定文件。

+0

PHP在雙引號字符串中插入變量。 – Barmar

+0

也許是真的,但它解決了加載用戶名 – pzirkind

+0

的問題,另外我認爲你忽略了變量也被單引號括起來的事實 – pzirkind

0

希望這可以幫助: 你可以調試,如果會議是空的或沒有。

session_id()返回標識當前會話的字符串。如果會話尚未初始化,它將返回一個空字符串。

if(session_id() == '') 
{ 
     // session has NOT been started 
     session_start(); 
} 
else 
{ 
     // session has been started 
} 

check session in php if empty

0

讓它在index.php文件,包括您的網頁,如果用戶登錄。檢查內部的每個和你包括每一頁。如果用戶沒有設置,則重定向到登錄頁面。

例如:

的index.php

if(isset($_SESSION['UserId'])){ 
     //make simple function to get the username from user ID 
     $dUserName = getUserName($_SESSION['UserId']); 
     echo "wellcome".$dUserName; 
     echo "<href='logout.php'>Logout</a>"; 
} 
else{ 
     echo "<href='login.php'>Logout</a>"; 
} 
if(isset($_GET['page'])){ 
    $includePage = "includes/".$_GET['page'].".php"; 
} 
else{ 
    $includePage = "includes/login.php"; 
} 
if(isset($includePage)){ 
    include($includePage); 
} 

樣品從頁面加載索引

sample.php

if(isset($_SESSION['user']) && $_SESSION['user'] != ''){ 
     //show your page 
} 
else{ 
     //redirect to login page 
     echo '<SCRIPT language="JavaScript">window.location="index.php?page=login";</SCRIPT>'; 
}