2013-10-30 116 views
0

我有流量以下文件:如何阻止我的PHP文件直接訪問

的index.html - >的login.php - > displayinbox.php

的login.php中的文件確認用戶數據庫並重定向到displayinbox.php文件。

問題是,如果有人只是鍵入直接鏈接到displayinbox.php頁面,頁面中的腳本運行。

我該如何阻止這種情況發生?我嘗試了'define'和'defined'方法,但這隻適用於我猜測的包含文件。任何幫助?

+0

在login.php中設置允許/禁止用戶的會話值。如果有人直接點擊顯示腳本,他們將沒有該會話值,並且您可以拒絕他們訪問。 –

回答

2

使用會話值跟蹤用戶是否登錄。如果!$_SESSION['whatever']將它們重定向到索引/登錄頁面。

例子:

的login.php

session_start(); 
/* login code here */ 
$_SESSION['logged_in'] = true; 

displayinbox.php

session_start(); 
if (!$_SESSION['logged_in']) { 
    header("Location: login.php"); 
    exit; 
} 
+0

你能給我一個例子嗎? – Arihant

+0

A投入基本會話示例 –

+0

即使我在登錄頁面上設置會話變量,displayinbox.php頁面仍然無法捕捉會話變量,並且認爲它未設置,並且一直將其重定向到登錄.PHP – Arihant

0

有很多方法可以做到這一點。在你的displayinbox.php和POST_SELF的頂部包含login.php,或者登錄後,設置會話cookie並檢查displayinbox.php頁面的頂部。

0

這是一個關於安全性的非常開放式的問題,它要求在這裏可以完全提供的任何答案都不止於此。在最簡單的層面上,設置一個$_SESSION變量就是我會走的路。

如果您使用的是MVC模式,請使用所有需要密碼訪問的控制器進行擴展的Secure_Controller。如果不使用MVC或甚至某種類型的模板,則需要在每個要包含密碼保護的頁面中包含一個腳本。

的login.php

<?php 
//check username and pw against the database 
if($passwordAndUsername == 'good'){ 
    $_SESSION['loggedIn'] = 'yes'; 
} 
?> 

securityCheck.php

<?php 
if($_SESSION['loggedIn'] != 'yes'){ 
    $message = 'you must log in to see this page.'; 
    header('location:login.php'); 
} 
?> 

包括securityCheck.php在任何密碼保護的頁面的開始。