2010-12-29 1 views
0

Я могу войти в систему, но при обработке на следующую страницу (область memebers) я не могу отображать информацию о пользователе, не говоря уже о печати $_SESSION[email]. Я не уверен, что случилось. Ниже приведен код входа, а участники тестирования - страница.Проблема переноса сеанса на другие страницы

Войти Страница:

session_start(); 

//also in a real app you would get the id dynamically 
$sql = "select `email`, `password` from `accounts` where `email` = '$_POST[email]'"; 
$query = mysql_query($sql) or die ("Error: ".mysql_error()); 

while ($row = mysql_fetch_array($query)){ 

    $email = $row['email']; 
    $secret = $row['password']; 

    //we will echo these into the proper fields 

} 
mysql_free_result($query); 

// Process the POST variables 
$email = $_POST["email"]; 

//Variables 
$_SESSION["email"] = $_POST["email"]; 

$secret = $info['password']; 

//Checks if there is a login cookie 

if(isset($_COOKIE['ID_my_site'])) 

//if there is, it logs you in and directes you to the members page 

{ 
    $email = $_COOKIE['ID_my_site']; 

    $pass = $_COOKIE['Key_my_site']; 

    $check = mysql_query("SELECT email, password FROM accounts WHERE email = '$email'")or die(mysql_error()); 

    while($info = mysql_fetch_array($check)) 

    { 

     if (@ $info['password'] != $pass) 
     { 
     } 

     else 

     { 

      header("Location: home.php"); 

     } 
    } 

} 

//if the login form is submitted 

if (isset($_POST['submit'])) { // if form has been submitted 

    // makes sure they filled it in 

    if(!$_POST['email'] | !$_POST['password']) { 

     die('You did not fill in a required field.'); 

    } 

    // checks it against the database 

    if (!get_magic_quotes_gpc()) { 

     $_POST['email'] = addslashes($_POST['email']); 

    } 

    $check = mysql_query("SELECT email,password FROM accounts WHERE email = '".$_POST['email']."'")or die(mysql_error()); 

    //Gives error if user dosen't exist 

    $check2 = mysql_num_rows($check); 

    if ($check2 == 0) { 

     die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>'); 
    } 

    while($info = mysql_fetch_array($check)) 

     //gives error if the password is wrong 

     if (@ $_POST['password'] != $info['password']) { 

      die('Incorrect password, please try again'); 
     } 

     else 

     { 

      // if login is ok then we add a cookie 

      $_POST['email'] = stripslashes($_POST['email']); 

      $hour = time() + 3600; 

      setcookie(ID_my_site, $_POST['email'], $hour); 

      setcookie(Key_my_site, $_POST['password'], $hour); 

      //then redirect them to the members area 

      header("Location: home.php"); 

     } 

    } 

} 

else 

{  

    // if they are not logged in 

?> 

<?php 

} 

?> 

home.php

session_start(); 

if(!isset($_SESSION['email'])) { 
    header('Location: login_test3.php'); die('<a href="login_test3.php">Login first!</a>'); 
} 

//Variables 
$_SESSION["email"] = $email; 

print $_SESSION['name']; 

UPDATE

 Just realized the existing code gets in to the home.php file but will not echo anything. But as soon as you hit refresh the session is gone. 
+1

Предложение не позволяет конечному пользователю узнать, не соответствует ли его имя пользователя или пароль. Это может помочь облегчить перерыв учетной записи. – Woot4Moo

+0

О да, это просто тестовый код для работы с областью участников. Будет исправлено позже. Спасибо, Гумбо. – AAA

+0

Как передается идентификатор сеанса? Пожалуйста, сообщите нам свою текущую [конфигурацию, касающуюся идентификатора сеанса] (http://php.net/session.configuration) (т.е. * session.use \ _cookies *, * session.use \ _only \ _cookies *, * session.use \ _trans \ _sid *). – Gumbo

ответ

1

Можете ли вы переформатировать этот код? Это очень трудно понять с помощью отступов и пробелов. Как только он вернется, я сделаю все возможное, чтобы помочь вам.

Один наконечник: ввод чистка!

Эти функции спасли мне много неприятностей:

function forceInteger($variable) { 
    return preg_replace("/[^0-9]/", "", $variable); 
} 
function forceAlpha($variable) { 
    return preg_replace("/[^A-Za-z]/", "", $variable); 
} 
function forceAlphaNum($variable) { 
    return preg_replace("/[^A-Za-z0-9 \-\.]/", "", $variable); 
} 
function forceAlphaNumNoSpace($variable) { 
    return preg_replace("/[^A-Za-z0-9\-\.]/", "", $variable); 
} 

Я обнаружил, что черточки и периоды достаточно для большинства коротких строк. Если брать в текстовое поле, запустить его через это:

function forceNaturalLanguage($variable) { 
    return preg_replace("/[^A-Za-z0-9 \-\.\?\!]/", "", $variable); 
} 

Вот мое предложение: login.php (скрипт, который выполняет проверку подлинности)

session_start(); 
if ($_POST["submit"]) { 
    // query database for email and password, where email is posted email 
    $sql = "SELECT * FROM `accounts` WHERE `email` = '{$_POST[email]'}"; 
    $query = mysql_query($sql) or die ("Error: ".mysql_error()); 

    if (mysql_num_rows($query) == 1) { 
     // there's one result - we got it! 
     $result = mysql_fetch_assoc($query); 
     if ($_POST["password"] == $result["password"]) { 
      // Successful auth. 
      // Set session vars and redirect with header() 
      $_SESSION["Authenticated"] = true; 
      $_SESSION["FirstName"] = $result["FirstName"]; 
      $_SESSION["Email"] = $result["Email"]; 
      header("Location: /home.php?event=login"); 
      // Don't forget to exit(), otherwise some other code may run, causing unintended behaviours 
     } 
     else { 
      // Password didn't match. 
      exit("Incorrect password"); 
     } 
    } 
} 
else { 
    // No email match 
    exit("Email not found."); 
} 

Пару точек:
1. в два раза -quoted strings, чтобы поместить значение массива в запрос, вы должны заключить его в {фигурные скобки} следующим образом: «Привет, {$ _SESSION [" FirstName "]}";

2. Do not EVER установить переменные сеанса непосредственно из пользовательского ввода. Если вы извлекаете его из базы данных, храните его оттуда. Это самый безопасный способ.

3. Настройка вашего собственного файла cookie для входа бессмысленна, когда вы используете сеансы PHP. Если вы хотите изменить имя, попробуйте что-то вроде этого:

ini_set("session.name","coolSession"); 
+0

Реформат. Благодарю. – AAA

+1

Могу ли я спросить, почему вы дважды запрашиваете базу данных для учетных данных пользователя? Я отредактирую свой ответ с некоторыми предложениями ... –

+0

Спасибо Алекс. Но это все еще не работает. Сейчас это просто дает мне пустую страницу. – AAA

Смежные вопросы