2016-06-09 8 views
0

Ich habe ein Login-Formular in PHP erstellt, das funktioniert ok, aber ich habe festgestellt, dass meine Seite, auf die mein Benutzer gerichtet ist, auch für jeden zugänglich ist. Wie kann ich die Seiten schützen, damit sie nur für diejenigen zugänglich sind, die auf der Website angemeldet sind?Anmeldeformular und geschützte Seiten nur für eingeloggte Benutzer?

Muss ich ein Skript auf der Erfolgsseite selbst platzieren?

Ich habe schon ein paar verschiedene Dinge ausprobiert, bin mir aber nicht sicher, was los ist. Hier ist was ich bisher habe!

checking_login.php

<?php 
ob_start(); 
$host=""; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name=""; // Table name 

// Connect to server and select databse. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Define $myusername and $mypassword 
$myusername=$_POST['myusername']; 
$mypassword=$_POST['mypassword']; 

// To protect MySQL injection (more detail about MySQL injection) 
$myusername = stripslashes($myusername); 
$mypassword = stripslashes($mypassword); 
$myusername = mysql_real_escape_string($myusername); 
$mypassword = mysql_real_escape_string($mypassword); 
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'"; 
$result=mysql_query($sql); 

// Mysql_num_row is counting table row 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1){ 

// Register $myusername, $mypassword and redirect to file "login_success.php" 
$_SESSION['username'] = $myusername; 
$_SESSION['password'] = $mypassword; 
header("location: portkey.php"); 
} 
else { 
echo "Wrong Username or Password. "; 
} 
ob_end_flush(); 
?> 

Dies ist die Seite Teil, wo ich sprach über die Seite zu umgeleitet werden. (Es ist immer noch öffentlich für alle).

<?php 
session_start(); 
$host=""; // Host name 
$username=""; // Mysql username 
$password=""; // Mysql password 
$db_name=""; // Database name 
$tbl_name="members"; // Table name 

    session_start(); 
    if(!isset($_SESSION['myusername'])) { 
     header("location:login.php"); 
    } 
?> 

Login ist die Seite mit dem Formular. Die Tabelle/Benutzer.

<table width="300" border="0" align="center" cellpadding="0" cellspacing="1"> 
<tr> 
<form name="form1" method="post" action="checking.php"> 
<td> 
<table width="100%" border="0" cellpadding="3" cellspacing="1"> 
<tr> 
</tr> 
<tr> 
<td width="78">Username</td> 
<td width="0">:</td> 
<td width="294"><input name="myusername" type="text" id="myusername"></td> 
</tr> 
<tr> 
<td>Password</td> 
<td>:</td> 
<td><input name="mypassword" type="text" id="mypassword"></td> 
</tr> 
<tr> 
<td>&nbsp;</td> 
<td>&nbsp;</td> 
<td><input type="submit" name="Submit" value="Login"></td> 
</tr> 
</table> 
</td> 
</form> 
</tr> 
</table> 
+0

den zweiten Anruf 'session_start()' in Ihrer geschützten Seite entfernen – Dale

+1

Sie auf going live mit nicht sind zu wollen, sind Sie? –

Antwort

0

Sie müssen überprüfen, ob username isset:

if(!isset($_SESSION['username'])) { 
     header("location:login.php"); 
    } 

Auch werden Sie session_start(); zweimal aufrufen. Der zweite Anruf wird jedoch ignoriert.

Tipp: Statt den Benutzernamen und das Passwort zu speichern, sollten Sie den Benutzer id in der Sitzung speichern.

0

Sie starten die Sitzung nicht unter checking_login.php. Ändern Sie Ihren Code in:

session_start(); 
$_SESSION['username'] = $myusername; 
$_SESSION['password'] = $mypassword; 

Sie müssen die Sitzung nicht zweimal auf der geschützten Seite starten. Entfernen Sie die session_start(); über der if Anweisung.

Zusätzlich ... auf Ihrer geschützten Seite suchen Sie nach einer Sitzung, die nicht existiert! ändern if(!isset($_SESSION['myusername'])) {-if(!isset($_SESSION['username'])) {

0

Der Grund Ihrer Mitglieder-Seite noch sichtbar und für jedermann zugänglich ist, weil Sie nicht richtig überprüft, ob es einen user session Satz ist.

Um Ihren Code funktioniert, müssen Sie von Ihnen bedingte Anweisung ändern:

if(!isset($_SESSION['myusername'])) { 
    header("location:login.php"); 
} 

zu:

if(!isset($_SESSION['username'])) { 
    header("location: login.php"); 
} 

weil myusername ist nicht die Variable, die Sie in Ihrer Sitzung gespeichert ist.

Zitiert Ihre Einstellung des $_SESSION:

$ _SESSION [ 'username'] = $ myusername;

Wenn Sie setzen Ihre $_SESSION Sie verwendet username und nicht myusername. Achten Sie darauf, bei der Überprüfung zu bleiben, ob $_SESSION eingestellt ist.

Damit Ihre Seite zu arbeiten, wie Sie es wünschen Sie das folgende Format verwenden müssen:

<?php session_start(); ?> 
<!DOCTYPE html> 
<html> 
    <head></head> 
    <body> 
     <?php 
      // Check if user session is set. If it is redirect to login.php. 
      if(!isset($_SESSION['username'])): 
       header("location: login.php"); 

      // If it is not set show the your login form. 
      else: 
     ?> 

     <!--Your HTML code for the form.--> 

     <?php 
      endif; 
     ?> 
    </body> 
</html> 

Falls Ihre Login-Formular in einer anderen Seite ist, dann können Sie wieder umleiten, indem die else Teil ändern, wie gezeigt :

// If it is not set show the your login form. 
else: 
    header("location: loginform.php"); // The name of the file 
endif; 
0

wenn Sie eine globale header.php-Datei haben, dann in dieser Überprüfung, ob die $_SESSION['username'] gesetzt. Wenn dies der Fall ist, setzen Sie $logged_in = true, und wenn nicht, setzen Sie $logged_in = false. Es ist das, was ich für meine Website verwende. Wenn Sie header.php nicht verwenden, dann überprüfen Sie in der Seite $_SESSION['username']. Für beide, wenn $looged_in = true oder isset($_SESSION['username']), dann NICHT umleiten. aber wenn $logged_in = false oder !isset($_SESSION['username']), dann leiten Sie sie um. Sie können auch eine $_SESSION['logged_in'] Variable festlegen.

einige Code zu helfen.

header('location: page.php'); // REDIRECT VIA PHP 

// IF YOU HAVE header.php 
if(isset($_SESSION['username'])) $logged_in = true; // IN herder.php 
else $logged_in = false; // IN herder.php 

if($logged_in != true) header('location: login.php') // IN USERS ONLY PAGE 

// IF YOU DON'T HAVE header.php 

// OPTION 1 
if(!isset($_SESSION['username'])) header('location: login.php'); // IN USERS ONLY PAGE 

// OPTION 2 
$_SESSION['logged_in'] = true; // WHEN THE USER HAS LOGGED IN 

if($_SESSION['logged_in'] != true) header('location: login.php'); // IN USERS ONLY PAGE 
Verwandte Themen