$ _SESSION трудности - PullRequest
       10

$ _SESSION трудности

0 голосов
/ 20 августа 2009

Я создаю сценарий входа в систему, в котором хранится значение переменной от $userid до $_SESSION["userid"], а затем перенаправляет пользователя обратно на главную страницу (дополнительный вопрос: как отправить его туда, где он был?).

Однако, когда я возвращаюсь на эту страницу, я повторяю session_id() и значение $_SESSION["userid"], и отображается только идентификатор сеанса. Мне пришло в голову, что, возможно, моя страница перенаправления должна располагаться вверху, но если бы это было правдой, то сессия, которую я повторяю, менялась бы каждый раз, когда я оказывалась на той странице, которая ее повторяла. Вот скрипт:

    <?php
session_start();
include_once("db_include.php5");
doDB();
//check for required fields from the form
if ((empty($_POST['username']) && empty($_POST['email'])) || empty($_POST['password'])) {
header("Location: loginform.php5");
exit;
}   else if($_POST["username"] && $_POST["password"]){

    //create and issue the query
    $sql = "SELECT id FROM aromaMaster WHERE username='".$_POST["username"]."' AND password=PASSWORD('".$_POST["password"]."')";
    $sql_res =mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

    //get the number of rows in the result set; should be 1 if a match
    if(mysqli_num_rows($sql_res) != 0) {
      //if authorized, get the userid
      while($info = mysqli_fetch_array($sql_res)) {
        $userid = $_info["id"];
      }
      //set session variables
      $_SESSION['userid'] = $userid;

      mysqli_free_result($sql_res);
      //redirect to main page
      header("Location: loginredirect.php5");
      exit; }
    } else if($_POST["email"] && $_POST["password"]) {

          //create and issue the query
    $sql = "SELECT id FROM aromaMaster WHERE email='".$_POST["email"]."' AND password=PASSWORD('".$_POST["password"]."')";
    $sql_res =mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

    //get the number of rows in the result set; should be 1 if a match
    if(mysqli_num_rows($sql_res) != 0) {

      //if authorized, get the userid
      while($info = mysqli_fetch_array($sql_res)) {
        $userid = $_info["id"];
      }
      //set session variables
      $_SESSION['userid'] = $userid;

      mysqli_free_result($sql_res);

      //redirect to main page
      header("Location: loginredirect.php5");
      exit;}
      } else {
      //redirect back to login form
      header("Location: loginform.php5");
      exit;
    }
    mysqli_close($mysqli);
?>

Ответы [ 3 ]

3 голосов
/ 20 августа 2009

Вы делаете это:

while($info = mysqli_fetch_array($sql_res)) {
    $userid = $_info["id"];
}

Где вы должны это сделать:

while($info = mysqli_fetch_array($sql_res)) {
    $userid = $info["id"];
}
1 голос
/ 20 августа 2009

Убедитесь:

   <?php
   session_start();

Вверху каждой страницы.

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

1 голос
/ 20 августа 2009

Вам нужно позвонить session_write_close(), чтобы сохранить изменения данных сеанса.

Побочный ответ: вы можете использовать $SERVER["HTTP REFERER"] для перенаправления назад, если оно было заполнено браузером

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...