2017-05-25 63 views
0

我正在製作一個動態網站,並通過電子郵件發送重置密碼,並且我的數據庫中有此標誌,因此當用戶重置密碼時,該值爲true,並且下一次用戶登錄後,他將被重定向到更改密碼頁面。索引始終刷新

我正在使用帶開關的單個索引頁。

<?php 
session_start(); 
$lig=mysql_connect("localhost", "root", "") or 
     die ("Problema na ligação ao servidor MYSQL"); 
mysql_select_db("demo",$lig); 
if (isset($_REQUEST['cmd'])) $cmd=$_REQUEST['cmd']; else $cmd='home'; 
?> 

<div class="col-md-12"> 
     <div class="row"> 

         <?php 

      switch($cmd) { 
       case 'home': require('home.php');break; 
       case 'pw': require('users/pw.php');break; 
      } 
      ?> </div> </div> 

我做了這段代碼,所以當重置不同於NULL時,他將用戶重定向到pw。

if(isset($_SESSION['user'])){ 
    if(is_null($_SESSION['reset'])){ 
    } 
    else{ echo "<meta http-equiv=refresh content=0;URL=index.php?cmd=pw>"; 
     }  
} 

但頁面似乎處於無限循環的清爽。 我把它放在index.php頁面中,但是如果我把它放在主頁上,例如它工作的很好,我希望能夠在索引中做到這一點,所以我不必把它放在我的網站的每一頁... 讓content=0;更大的時間不是一個可靠的選擇.. 謝謝!

回答

0

使用session_destroy()在用戶更改密碼後銷燬會話,因此您只需檢查是否設置了$ _SESSION。這個例程是爲了讓你面向已登錄頁面的用戶。

function changePass(){ 
//YOUR ROUTINE 
    if ($queryExecuted == true){ 
    session_destroy(); 
    } 
} 

//checking session 
if(!isset($_SESSION)){ 
    echo "<meta http-equiv=refresh content=0;URL=index.php?cmd=pw>";  
} 

您的元總是因爲運行在else語句,服用而$ _SESSION所有其他條件[「復位」]不爲空。其他重要的事情是避免使用回聲METAS,使用header代替:

header("Refresh:0"); 
//or refresh and redirect 
header("Refresh:0; url=page2.php"); 

用戶登錄後,不要重定向到索引頁面以及所有驗證,只是驗證自己的用戶登錄程序內,然後重定向到用戶/ pw.php

如果你不想改變你的全部例行檢查時,頁面總是令人耳目一新,因爲不檢查用戶所在:

if(isset($_SESSION['user']) && !is_null($_SESSION['reset']) && (isset($_GET['cmd']) && $_GET['cmd'] != 'pw')){ 
header("Refresh:0; url=index.php?cmd=pw"); 
} 
+0

我設置$ _SESSION [「復位」]到null,在他之後,但那不是問題,謝謝你的建議問題是,當用戶在更改密碼頁面時,頁面不會停止刷新,使其無法更改... –

+0

好點,我編輯了答案 – calexandre

+0

,所以我將其更改爲'if(isset($ _SESSION ['user'])&&!is_null($ _ SESSION ['reset'])){ header(「Refresh:0; url = index.php?cmd = pw「); }'但仍然刷新 –