2012-05-18 35 views
2

有兩個輸入字段,一個用於輸入密碼的用戶名。用戶名和密碼是從數據庫中提取的,如果找到了用戶名和密碼組合,則該標誌被設置爲1。如何爲登錄頁面創建會話?

$match = 1; 
if ($match) { 
    header('Location: http://www.example.com/myProfile'); 
} else { 
    header('Location: http://www.example.com/errorpage'); 
} 

頁面仍然存在問題,任何人都可以輸入url「www.example.com/myPforile」並訪問內容。如何防止創建會話變量?

+0

什麼頁面不能訪問? – Chords

+0

有什麼問題? – Travesty3

+0

如果沒有重定向,那麼會顯示「500內部服務器錯誤」,請檢查錯誤日誌。 – MrCode

回答

3

這是我會建議的。

首先確保您在頁面頂部包含session_start();

您的登錄頁面應該類似於PHP代碼。

if($_POST['submit']=='Login') { 

$err = array(); 
// will hold our errors 

if(!$_POST['email'] || !$_POST['password']) 
    $err[] = 'All the fields must be filled in!'; 

if(!count($err)) { 

$row = mysql_fetch_assoc(mysql_query("SELECT id FROM members WHERE email='{$_POST['email']}' AND pass='".$hash."'")); 

if($row['id']) 
$_SESSION['id'] = $row['id']; 

} 

} 

然後在任何你想要登錄的頁面上放一些東西來檢查你創建的會話ID。

if(!isset($_SESSION['id']) || empty($_SESSION['id'])) { 

// redirect them to the login page, they have no session id set 

} 

這是我所做的一些基本事例。肯定會擴展它,並根據您的需求進行調整。

2

如果我正確理解你的問題,你不能保護你的myProfile頁面。

您需要做的是在成功登錄時設置會話變量並檢查myProfile頂部的會話變量。

1

我假設你的意思是,你仍然能夠訪問該頁面沒有被記錄在你需要做同樣的事情到

$logged in = $_SESSION['loggedin']; 
if($loggedin) { 
    die('whatever not allowed here or something') 
} 
+0

我應該在哪裏創建這個會話變量? – NewUser

+0

登錄驗證通過。那麼當用戶註銷時執行session_destroy(); –

+0

@Dibya,你創建一個會話變量,因爲那麼你肯定知道是否設置了該變量,那麼用戶已登錄並且應該可以訪問配置文件頁面。例如,如果您沒有這樣做,則任何知道個人檔案頁面的人都可以訪問http://www.example.com/myProfile,而無需登錄即可查看該頁面。 – Jako

4

下面這種情況是我使用的代碼樣本看看會議是否設置:

<?php 
session_start(); 
if(!isset($_SESSION['userId'])){ 
    header('Location: http://example.com/errorpage'); 
}else{ 
    header('Location: http://www.example.com/myProfile'); 
} 
?> 

希望有所幫助。

相關問題