我正在创建一个动态网站,我正在通过电子邮件重置密码,我在我的数据库中有这个标志,所以当用户重置密码时,该值为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 :(得分: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>";
}
你的meta总是在运行,因为在else语句中,在$ _SESSION ['reset']不为空时采用所有其他条件。其他重要的事情是避免使用echo metas,而是使用header:
header("Refresh:0");
//or refresh and redirect
header("Refresh:0; url=page2.php");
用户登录后,不要重定向到索引页面和所有这些验证,只需在自己的用户登录例程中验证并重定向到users / pw.php
如果您不想更改所有例行检查,则页面始终刷新,因为不检查用户所在位置:
if(isset($_SESSION['user']) && !is_null($_SESSION['reset']) && (isset($_GET['cmd']) && $_GET['cmd'] != 'pw')){
header("Refresh:0; url=index.php?cmd=pw");
}