2016-08-11 62 views
-2

當我按下返回按鈕離開我的頁面時。登錄頁面不應該出現。因爲我已經登錄了!當其他用戶已經登錄時,其他用戶如何登錄!它應該要求現有用戶註銷,然後允許其他用戶登錄!例如:當我們登錄Facebook時,並嘗試去登錄頁面。它不打開登錄頁面,而是打開我們的帳戶,因爲我們仍然登錄!另一個用戶可以在沒有現有用戶註銷的情況下登錄

帳戶頁面代碼:

<?php 
require 'connection.php'; 
session_start(); 
?> 

<?php 
if(isset($_SESSION['id'])) 
{ 
$id=$_SESSION['id']; 
?> 

<!doctype html> 
<html> 
<head></head> 
<body> 

<div id="content"> 
logged in 
</div> 

</body> 
</html> 

<?php 
} 
else 
{ 
header('location:login.php'); 
die(); 
} 
?> 

註冊碼:

<?php 
require 'connection.php'; 
session_start(); 
?> 

<?php 
if(isset($_POST['REGISTER'])) 
{ 
$user=$_POST['user']; 
$email=$_POST['email']; 
$pass=$_POST['pass']; 

$sql = "INSERT INTO users (username,email_id,password) VALUES ('$user','$email','$pass');"; 

$query = mysqli_query($conn, "SELECT * FROM users WHERE email_id='".$email."'"); 

if(mysqli_num_rows($query) > 0) 
{ 
echo "OOPS! This email id is already registered."; 
    header ("refresh7; url=login.php"); 
} 
else 
{ 
if($conn->multi_query($sql) === TRUE) 
{ 
echo 'Hello'.' '.$user.'!'.'<br>'; 
}}} 
$conn->close(); 
header ("refresh:7; url=login.php"); 
?> 

登錄頁面代碼:

<?php 
require 'connection.php'; 
session_start(); 
?> 

<html> 
<head></head> 
<body> 

<div id="left"> 
<h2> <a href="login.php"> <center> LOGIN </center> </a> </h2> 

<form action="" method="post"> 

<b> Email Id: </b> <input type="email" name="email" placeholder="[email protected]" required> <br> <br> 
<b> Password: </b> <input type="password" name="pass" placeholder="****" required> <br> <br> 

<input type="submit" value="LOGIN" name="LOGIN"> 
</form> 

<?php 
if(isset($_GET['error'])==true) 
{ 
echo '<font color="red"> <p align="center"> username & password does not match! </p> </font>'; 
} 
?> 

</div> 

<?php 
if(isset($_POST['LOGIN'])) 
{ 
$email=$_POST['email']; 
$pass=$_POST['pass']; 

$sql = $conn->query("SELECT * FROM users WHERE email_id='$email' AND password='$pass'"); 

$row = $sql->fetch_array(MYSQLI_BOTH); 

if($row>0) 
{ 
$_SESSION['id'] = $row['id']; 
header('location: account.php'); 
} 
else 
{ 
header('location:login.php?error=1'); 
}} 
?> 

</body> 
</html> 
+0

您的代碼對SQL注入開放。使用參數化查詢。密碼也應該散列。 – chris85

+0

每個頁面都必須啓動會話,並且每個頁面都必須檢查'$ _SESSION ['id']'以知道登錄是否已經執行 – RiggsFolly

+0

@Confiqure請不要忘記在編輯時刪除不可編輯的代碼片段格式 – Will

回答

1

你可以添加某種會話驗證,

if(isset($_SESSION['id'])) 
{ 
    ?> 

    Your Logout HTML 

    <?php 
} else { 
    ?> 
    Your Login HTML. 
    <?php 
} 

if聲明將顯示註銷HTML何時設置了您的ID會話,該會話僅在您登錄時設置。

else部分會顯示登錄HTMLID會議沒有設定,因此你還沒有登錄。

而不必包括它的每一頁上,你可以簡單地劃分你的網站中的部分,例如頁眉,內容和頁腳,並將此代碼包含在您的標題中,然後在您的主文件中使用requireinclude來節省您不得不重新編寫整個部分的麻煩。

編輯

你很容易SQL Injection使用MySQLi的或PDO'sprepared statements

+0

我已將它添加到我的帳戶頁面上! –

0

添加到您的登錄頁面的頂部:

if(isset($_SESSION['id'])) { 
    header("Location:account.php");} 

你雖然需要更多的認證。這將確保用戶在嘗試查看登錄頁面時被重定向到帳戶頁面。

+0

它工作!謝謝soooooooooooooooo多!!!!!!! –

+0

很高興它@tanishas你可以接受答案,如果它解決了你的問題。 –

+0

我遇到了一個新問題,在我的登錄頁面上添加了上述代碼段!在輸入錯誤的電子郵件或密碼之前,一條消息被回覆爲'inavlid email/passwrd'。但是現在,它不會迴應任何輸入錯誤憑證的內容,而只是刷新登錄頁面! –

相關問題