2016-05-19 5 views
-1

Ich folgte this guide, weil ich versuche, herauszufinden, wie eine Anmeldesitzung funktioniert, aber sobald ich mich anmelde, bekomme ich einen Fehler von meinem Browser, dass mein ServerZu viele Weiterleitungen mit Login-Sitzung Beispiel

umgeleitet Sie zu oft.

Ich glaube, das Problem mit session.php ist denn wenn ich session.php herausnehmen und alle Familienangehörigen in meinem anderen Code, es funktioniert ganz gut.

<?php 
//Establishing Connection with Server by passing 
//server_name, user_id and password as a parameter 
$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

//Selecting Database 
$db = mysqli_select_db($connection, DB_NAME); 
session_start(); //starting session 

//storing session 
$user_check = $_SESSION['login_user']; 

//SQL Query To Fetch Complete Information of User 
$ses_sql = mysqli_query($connection, "SELECT StoreID FROM Store WHERE StoreID='$user_check'"); 
$row = mysqli_fetch_assoc($ses_sql); 

$login_session = $row['StoreID']; 

if(!isset($login_session)){ 
    mysqli_close($connection); //Closing connections 
    header('Location: fakeindex.php'); //Redirecting to Home Page 
} 
?> 

Es gibt es eine Vielzahl von anderen Nutzern über das gleiche Problem beschweren, aber der Autor schreibt sich nur ab und/oder ignoriert sie. Was ist das Problem?

fakeindex.php

<?php 
include('login.php'); // Includes Login Script 

if(isset($_SESSION['login_user'])){ 
    header("location: profile.php"); 
} 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Login Form in PHP with Session</title> 
</head> 
<body> 
<div id="main"> 
    <h1>PHP Login Session Example</h1> 
    <div id="login"> 
     <h2>Login Form</h2> 
     <form action="" method="post"> 
      <label>UserName :</label> 
      <input id="name" name="username" placeholder="username" type="text"> 
      <label>Password :</label> 
      <input id="password" name="password" placeholder="**********" type="password"> 
      <input name="submit" type="submit" value=" Login "> 
      <span><?php echo $error; ?></span> 
     </form> 
    </div> 
</div> 
</body> 

login.php

<?php 
session_start(); // Starting Session 
$error=''; // Variable to Store Error Message 

if (isset($_POST['submit'])) { 
    if (empty($_POST['username']) || empty($_POST['password'])) { 
     $error = "Username or Password is invalid"; 
    } 
    else { 
     require_once("db_const.php"); 
     // Define $username and $password 
     $username=$_POST['username']; 
     $password=$_POST['password']; 

     //Establishing connection with server by passing 
     //server_name, user_id and password as a parameter 

     $connection = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME); 

     if (mysqli_connect_errno()) { 
      printf("Connection to the database failed: %s\n", mysqli_connect_errno()); 
     } 

     //To Protect MySQL injection for Security purpose 
     $username = stripslashes($username); 
     $password = stripslashes($password); 
     $username = mysqli_real_escape_string($connection, $username); 
     $password = mysqli_real_escape_string($connection, $password); 

     //Selecting Database 
     $db = mysqli_select_db($connection, DB_NAME); 

     //SQL query to fetch information of registered users and finds user match. 
     $query = mysqli_query($connection, "SELECT * FROM Store WHERE StoreID='$username' AND StorePassword='$password'"); 
     $rows = mysqli_num_rows($query); 

     if ($rows == 1) { 
      $_SESSION['login_user'] = $username; //Initializing session 
      header("location: profile.php"); //Redirecting to other page 
     } 
     else { 
      $error = "Username or Password is invalid"; 
     } 
     mysqli_close($connection); //Closing connection 
    } 
} 
?> 

profile.php

<?php 
include('session.php'); 
?> 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Your Home Page</title> 
</head> 

<body> 
    <div id="profile"> 
     <b id="welcome">Welcome : <i><?php echo $login_session; ?></i></b> 
     <b id="logout"><a href="logout.php">Log Out</a></b> 
    </div> 
</body> 
</html> 

logout.php

<?php 
session_start(); 
if(session_destroy()) {//Destroying all sessions 
    header("Location: fakeindex.php"); //Redirecting to home page 
} 
+0

Haben Sie Header in anderen Dateien? und/oder ein Mod Neuschreiben? oder beinhaltet, könnte alles wirklich sein. Sie sollten auch einen 'exit;' für Header hinzufügen. –

+0

@ Fred-ii- Ja, das tue ich. Ich wollte sie teilen, aber im Wesentlichen habe ich den Code im Hyperlink-Tutorial kopiert und eingefügt. Die einzigen Dinge, die ich änderte, waren einige veraltete "mysql" - und "mysqli" -Funktionen zu aktualisieren. – 8protons

+1

Nun, Sie gehen, und es könnte eine "logische" Sache hier sein. Ich habe meinen obigen Kommentar bearbeitet, um nach jedem Header 'exit;' hinzuzufügen, ansonsten könnte Ihr Code weiterhin ausgeführt werden. Vielleicht gibt es eine bedingte Aussage, die irgendwo weg ist. Schwer zu sagen, ohne alles zu sehen und wie alles zusammen funktioniert. –

Antwort

1

Session manchmal abhängig von Ihrem System und Ihren Code, wird nicht funktionieren, wenn Sie eine session_id("sessionID") haben, habe ich auch dieses Problem zu haben. Es ist eine Methode und eine Art, wie ich sie benutzt habe.

Sie haben auch eine Datenbank geklärt, wenn Sie bereits eine haben. Mit mysqli_connect() geben Sie einfach den Datenbanknamen am Ende an, was Sie bereits getan haben.

Was machen Sie also mit den Sitzungen?


Nun, ich habe meine eigene Lösung, die ich verwendet habe.

<?php 

// edit the `mysqli_connect` to your requirements. 
$connect = mysqli_connect("host", "user", "password", "database"); 

// since you have the database already defined then you don't need to: 
// mysqli_select_db(); 

// let's start the session, and get things going. 

session_id("mainID"); // you can rename this if you want. 
session_start(); 

// set the session `login` too: `false`, if the session hasn't been set yet. 
if(!isset($_SESSION['login'])) { 
    $_SESSION['login'] = false; 
} 

// and this is pretty much your solution. 
?> 

Und vielleicht möchten Sie auf MySQLi OOP, (AKA) Objektorientierte Programmierung verschieben. Es ist zuverlässiger, aber da Sie nur reguläre MySQLi verwenden.

Und als ein kleines Extra, um Ihnen zu helfen, werde ich Ihnen ein paar Dinge aufzeigen, die Sie überprüfen sollten.

Aktivitäten prüfen


  1. Sie Ihre .htaccess wollen werde überprüfen, um sicherzustellen, dass Sie nicht alles vermasselt werden.
  2. debuggen Sie Ihren Code, wie auf der Suche nach schließenden Klammern, die da sein sollen.

Und hier ist etwas Hilfe auf einer Login-Anfrage:

<?php 
if(isset($_POST['form'])) { 

    // username and password 

    // also if you want to make your password more secure, you can do a `sha1()`. 
    $user = mysqli_real_escape_string(strip_tags($_POST['username'])); 
    $pass = mysqli_real_escape_string(strip_tags($_POST['password'])); 

    $query = "SELECT * FROM accounts WHERE username='{$user}' AND 
    password='".sha1($pass)."' LIMIT 1"; 

    // since you are not using OOP, I'll just do it this way. 
    $set = mysqli_query($query); 

    // basicly means: 
    // if the user's input username and password equal to a row, 
    // it will execute the code below. 
    if(mysqli_num_rows($set) === 1) { 

    // for safety reasons, NEVER, and 
    // I mean EVER, store passwords in sessions or cookies. 
    // People can get access to session and cookies, 
    // so do not rely on cookies or sessions for storing passwords. 

    $_SESSION['login'] = true; 
    $_SESSION['username'] = $user; 
    } 
} 
?> 

HINWEIS: OOP für die Sicherung ist sehr gut, wie bind_param(), ist für Benutzereingaben, weil es die SQL-Anweisung erzählen was zu erwarten ist. wie string oder integer.

Hoffe das half!

+0

Ich habe endlich alles funktioniert und angepasst, um Ihre Vorschläge zu unterstützen, wie zum Beispiel den Wechsel zu OOP. Da meine ersten Sprachen objektorientiert waren, war das nicht schwer. Vielen Dank für Ihre äußerst nützliche Antwort. Ich wünschte nur, meine Post wäre besser, damit Ihre Antwort die Aufmerksamkeit bekommt, die sie verdient. Pass auf. – 8protons

+1

Oh, herzlich willkommen. Tut mir leid, ich bin bis jetzt nicht dazu gekommen. : P Also, ja. Ich entwickle erst seit 4 Monaten mit PHP. Und es scheint, ich habe viel gelernt. Aber VERTRAUEN Sie mir, heehee. Es gibt SOOOO viel mehr zu lernen. –

Verwandte Themen