2015-07-13 2 views
1

Я просматривал свою регистрационную форму и регистрационную форму, и меня беспокоит то, что у меня есть несколько сеансов, определенных для отдельных переменных каждой формы. Вот то, что я говорю:Неужели несколько сеансов, связанных с элементами одной таблицы, плохо?

Часть моей регистрационной формы:

$pass = md5($pass); 
      $regSQLI = "INSERT INTO users (id, email, birth_date, first_name, last_name, password, sign_up_date, activated) VALUES ('','$em','$bday','$fn','$ln','$pass','$sud','0')"; 
      $regQuery = mysqli_query($con, $regSQLI); 
      //variables that will be passed over from the register fields to forthcoming sessions 
      $_SESSION["email_login"] = $em; 
      $_SESSION["first_name"] = $fn; 
      $_SESSION["last_name"] = $ln; 

Часть моего входа в форме:

if ($userCount == 1) { //if the search finds a matching record of the login input form 
     while($row = mysqli_fetch_assoc($sqli)) { // use fetch_assoc 
      $id = $row["id"]; 
      } 
     $_SESSION["email_login"] = $email_login; 
     $_SESSION["first_name"] = $fn; 
     $_SESSION["last_name"] = $ln; 
     header("location: home.php"); 
     exit(); 
    } 
    else { 
    echo '<div id="regerrormsg">Login information is invalid. </div>'; 
    } 
    } 

Все работает, но я хочу знать, могу ли я сохранить некоторые производительности путем очистки, чтобы вызвать несколько сеансов. Причина, почему у меня есть несколько сеансов, потому что даже если пользователи будут использовать свою электронную почту, чтобы зарегистрироваться и войти в систему, система будет решать/эхо их по именам:

 <?php 
    echo $_SESSION["first_name"]."&nbsp".$_SESSION["last_name"]."."; 
    ?> 

Есть ли способ, где я могу просто одну переменную сеанса (возможно, электронную почту) в качестве валидатора и извлекать данные из базы данных, которая соответствует рассматриваемой переменной сеанса? Будет ли это чище и гладко? Спасибо.

+0

Нет никакой разницы. Клиент все еще получает только один файл cookie. То, как вы это делаете, прекрасно. Руководствуясь, пользователь может иметь несинхронизированную информацию, поэтому в этом случае вам может потребоваться только сохранить «users.id» в вашем сеансе и вытащить из него данные пользователя. –

+0

вы не вызываете «несколько сеансов». это сеанс SINGLE, который содержит несколько бит данных. ничто из этого НИКОГДА не доходит до клиента –

+0

@DaveChen Большое вам спасибо. Из любопытства, однако, что заставляет пользователя иметь несинхронизированную информацию? – CodeMerchant

ответ

1

Все выглядит вполне нормально, и, вероятно, не так много результатов, чтобы получить фиддинг.

Кроме того, ваш код на самом деле не показывает, что пользователю предлагается вводить через форму, или о том, что на самом деле запрашивается база данных для поиска ..., которые будут точками, которые могут быть оптимизированы немного.

... и, кажется, вы неправильно поняли, что такое суперглобал $_SESSION.

Что Вы рассматриваете как «нескольких сеансов», это на самом деле только один стандартный сеанс:. Массив держит любое количество ключей/значений пар вы хотели бы поставить в

Когда вы звоните session_start();, $_SESSION автоматически сгенерирован и/или загружен из файла/памяти/базы данных (ваш менеджер сохранения), установлен файл cookie или URL-адрес перезаписи с помощью $ _GET. Все зависит от ваших настроек.

Подробнее здесь: http://php.net/manual/en/intro.session.php

+0

@ OlfeSauffaus Большое вам спасибо, это имеет гораздо большее значение, применяя вашу логику к моему пониманию. – CodeMerchant

-1

U может сохранять данные в идентификатору пользователя сессии и может использовать его, чтобы получить данные из других таблиц.