我有一個非常簡單的登錄腳本,此網站的需求工程。問題是這些頁面中的某些頁面是通過外部鏈接訪問的,幷包含一個查詢字符串。問題是,如何最好地生成登錄頁面並保留查詢字符串。我測試了下面的方法,但是登錄後,我最終得到一個空白頁面。jQuery的,PHP,MySQL的登錄頁面保留查詢
該文件背後的想法是將其列入受保護的頁面的最頂端。 $ Page變量在包含之前設置。
登錄進入頁面,檢查授權的頂部,如果有效,加載基礎頁面。否則,顯示登錄屏幕並返回到提交頁面的頂部。
添加查詢字符串以這種方式形式可能不是標準,但它的工作,從我的經驗,在正常的HTML。更合理的方式可能是解析PHP的SERVER [QUERY_STRING],並將其循環到隱藏的輸入中。我還沒有嘗試過,但我想我會把它放在一起,因爲有人可能完全有一個更好的主意。
<? session_start();
include('funclogin.inc');
if($_SESSION['LoggedIn']){ LogOut(); }
else
{
if($_POST[Submit])
{
if(empty($_POST[User]) || empty($_POST[Pass]))
{
$LoginResult = 5;
}
else
{
// Checks that Username is in database and password is correct
$LoginResult = ConfirmUser($_POST['User'], $_POST['Pass']);
if($LoginResult == 1)
{
$_SESSION['LoggedIn'] = true;
}
}
}
if(!$_SESSION['LoggedIn'])
{
?>
<!DOCTYPE html>
<html>
<head>
<title>
My Title
</title>
<? include('include/MobileHead.inc'); ?>
</head>
<body>
<div data-role="page" id="LoginPage">
<? include('include/MobileHeader.inc'); ?>
<div data-role="content">
<form id="LoginForm" name="LoginForm" method="post" action="<?PHP echo($Page.'?'.$_SERVER['QUERY_STRING']); ?>" data-ajax="false">
<div data-role="fieldcontain"><label for="User">Username:</label>
<input type="text" id="User" name="User" maxlength="12" autofocus required />
</div>
<div data-role="fieldcontain"><label for="Pass">Password:</label><input type="password" id="Pass" name="Pass" maxlength="15" required /></div>
<input type="hidden" name="K" value="<?PHP echo($_REQUEST['K']); ?>" />
<input type="hidden" name="M" value="<?PHP echo($_REQUEST['M']); ?>" />
<div data-role="fieldcontain"><input data-theme="b" type="Submit" name="Submit" value="Enter" /></div>
</form>
</div><!-- /content -->
<? include('include/MobileFoot.inc'); ?>
</div><!-- page -->
</body>
</html>
<?PHP
}
}
?>
編輯: 我想出瞭解決辦法如下: 在中,我想要求一個登錄頁面,
if(!$LoggedIn)
{
$Page = "http://www.mydomain.com/mypage.php";
header('Location: login.php?Page='.$Page.'&'.$_SERVER['QUERY_STRING']);
}
在login.php中 設置查詢字符串,它現在包括頁面,在形式的行動:
<form id="LoginForm" name="LoginForm" method="post" action="<?PHP echo($_SERVER[PHP_SELF].'?'.$_SERVER['QUERY_STRING']); ?>" data-ajax="false">
因此,在成功登錄,我這樣做
$LoginResult = ConfirmUser($_POST['User'], $_POST['Pass']);
if($LoginResult == 1)
{
$_SESSION['LoggedIn'] = true;
$QueryString = "";
if(!empty($_SERVER['QUERY_STRING']))
{
$Str = explode('&',$_SERVER['QUERY_STRING']);
$Count = count($Str);
for($i=0;$i<$Count;$i++)
{
$Var = explode('=',$Str[$i]);
if($Var[0] == "Page")
{
$Page = $Var[1];
}
else
{
$kv[] = $Str[$i];
}
}
$QueryString = join("&", $kv);
}
Redirect($Page.'?'.$QueryString);
}
重定向只是一些JavaScript我放進一個PHP函數,爲了方便:
function Redirect($n)
{
die("<script type=\"text/javascript\">window.location='$n';</script>");
}
爲什麼當某人登錄並進入某個頁面時,您要做的第一件事就是將其註銷? – towr
僅當用戶未登錄時纔會將用戶發送至腳本(因此「LogOut」將被忽略),或者他們按下「註銷」按鈕,當然,這些按鈕僅在登錄時纔可見。 – RationalRabbit