如何正确保护php页面

如何正确保护php页面,php,Php,我有一个受登录保护的php页面,我将下面的代码放在我所有的php页面上 <?PHP session_start(); session_destroy(); if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) { header ("Location: infralogin.php"); } ?> <?PHP session_start(); session_destroy(); if (!(

我有一个受登录保护的php页面,我将下面的代码放在我所有的php页面上

<?PHP
session_start();
session_destroy();
if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) {
header ("Location: infralogin.php");
}
?>
<?PHP
session_start();
session_destroy();
if (!(isset($_SESSION['login']) && $_SESSION['login'] != '')) {
header ("Location: infralogin.php");
}
?>

我有我的主页,在我登录后它被路由到那里

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td colspan="2" align="center">
<form id="form1" name="form1" method="post" action="checklogin.php">
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td>&nbsp;</td>
</tr>
<tr bgcolor="#FFFFFF">
<td align="center"><a href="tickettracker.php">Ticket Uploader</a></td>
</tr>
<tr bgcolor="#FFFFFF">
<td align="center"><a href="raptool.php">RAP Tool</a></td>
</tr>
<tr bgcolor="#FFFFFF">
<td>&nbsp;</td>
</tr>
<tr bgcolor="#FFFFFF">
<td align="center"><a href="login/add_user.php">Add User</a></td>
</tr>
<tr bgcolor="#FFFFFF">
<td align="center"><a href="login/logout.php">Logout</a></td>
</tr>
</table>
</form></td>
</table>

现在这个tickettracker.php有一些子页面,我可以通过其中的链接访问这些子页面,下面是其中的示例链接

<tr>
<td width="135"><strong>Ticket Source:</strong></td>
<td align="left"><select name="Ticket" id="Ticket">
<option value="tickettracker.php" selected="selected">Please select...</option>
<option value="wireless_new.php">Wireless - Remedy</option>
<option value="smp_backend.php">SMP - Backend</option>
<option value="ess_remedy.php">ESS - Remedy</option>
<option value="wireline_remedy.php">Wireline - Remedy</option>
</select>
<input type="submit" value="Go" id="submit"/></td>
</tr>

<p align="center"><a href="view_transactions.php">View Transactions</a> | <a href="report_generator.php">Report Generator</a></p>
<tr align="center">
<p align="center">External Link: <a href="raptool.php">RAP Tool</a></p></td>

票证来源:
请选择。。。
无线补救
SMP-后端
ESS-补救措施
有线补救

|

外部链接:

我试着在所有子页面中输入下面的代码,以保护它们,因为我无法访问它们,并且我被路由到登录页面,但问题是,每当我已经登录并且我点击tickettracker.php访问子页面时,我仍然被重定向到登录页面


相反,使用以下推理,它应该会起作用:-)

多亏了MrCode。移除

session_destroy();
也是。因为它正在破坏当前会话,所以当前会话数据将丢失

相反,使用以下推理,它应该会起作用:-)

多亏了MrCode。移除

session_destroy();

也是。由于它正在破坏当前会话,因此当前会话数据将丢失。

条件应为:

if(!isset($_SESSION['login']) || $_SESSION['login'] == '')
这意味着:如果未设置登录名或登录名为空/缺失,则重定向

您还存在身份验证绕过问题,因为在重定向后您没有退出()。你应使用:

session_start();
//session_destroy(); // <-- removed
if (!isset($_SESSION['login']) || $_SESSION['login'] == '') {
    header ("Location: infralogin.php");
    exit();
}
session_start();

//会话_destroy();// 条件应为:

if(!isset($_SESSION['login']) || $_SESSION['login'] == '')
这意味着:如果未设置登录名或登录名为空/缺失,则重定向

您还存在身份验证绕过问题,因为在重定向后您没有退出()。你应使用:

session_start();
//session_destroy(); // <-- removed
if (!isset($_SESSION['login']) || $_SESSION['login'] == '') {
    header ("Location: infralogin.php");
    exit();
}
session_start();


//会话_destroy();//而不是(isset($\u会话['login'])和&$\u会话['login']!=''),您可以这样做!空($\u会话['login']),它同时检查两个。而不是!(isset($\u会话['login'])和&$\u会话['login']!=''),您可以这样做!空($_SESSION['login']),它检查两者。+1半正确,您只是缺少会话销毁问题此代码不工作:
if(!(isset($_SESSION['login']))|$| SESSION['login']==”){header(“Location:infralogin.php”)
,因为它允许我访问页面,即使我没有登录。}括号位于错误的位置,如果(!isset($_SESSION['login']))|$_SESSION['login']=='')它应该是
+1 MrCode。更新。同样感谢您的帮助@Muhammed Hedayet+1半正确,您只是错过了会话销毁问题此代码不起作用:
if(!(isset($\u session['login']))|$\u session['login']==”){header(“Location:infralogin.php”)
,因为它允许我访问页面,即使我没有登录。}括号位于错误的位置,如果(!isset($_SESSION['login']))|$_SESSION['login']=='')它应该是
+1 MrCode。更新。同时感谢@Muhammed Hedayetim已经在使用此代码
session_start();如果(!isset($\u SESSION['login'])和&$\u SESSION['login']=''{header(“Location:infralogin.php”);exit()}
,但它仍然将我重定向到登录页面…:(它应该是
|
而不是
&
,请尝试从我的答案中复制和粘贴。感谢您的帮助…它现在正在工作,它是
SESSION u()
从我的主页上,我没有删除它,这会导致再次重定向到登录页…但是我应该有这个
会话_destroy();
,以便在我注销时销毁会话,因为每个子页都有自己的注销按钮,所以我将
会话_destroy()放在
,如果我错了,请纠正我我是php新手…是的,只要你只在按下注销按钮时调用destroy,这是正确的。我已经在使用此代码
session\u start();if(!isset($\u session['login'])&&$\u session['login']=''{header(“Location:infralogin.php”);exit()}
,但它仍然会将我重定向到登录页面…:(应该是
|
而不是
&&
,请尝试从我的答案中复制和粘贴。感谢您的帮助…它现在正在工作,是
会话_destroy()
从我的主页上,我没有删除它,这会导致再次重定向到登录页…但是我应该有这个
会话_destroy();
,以便在我注销时销毁会话,因为每个子页都有自己的注销按钮,所以我将
会话_destroy()放在;
,如果我错了,请纠正我我是php新手……是的,只要你只在按下注销按钮时调用destroy,这是正确的。