Сессия не работает в первый раз, но во второй раз работает - PullRequest
1 голос
/ 20 июня 2019

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

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

Я попытался перечислить полезный код внизу:


срубы пользовательский in.php:

<?
    session_start();
    include('includingThis.php');

    unset($_SESSION["emaillogin"]);

    // Sørg for at e-mailen er undercased
    $email = addslashes($_POST[email]);
    $password = addslashes($_POST[pass]);


    if ($email == "" || $password == "") {
        header("Location: login.php?e=3");
        exit;
        die();
    }

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        header("Location: login.php?e=4");
        exit;
        die();
    }



    $email = strtolower($email);


    // TJEK OM BRUGEREN FINDES
    if ($stmt = $con->prepare("SELECT email, pass, uid, profilepic, paid FROM stnd_users WHERE email=?")) {


                /* bind parameters for markers */
                $stmt->bind_param("s", $email);

                $stmt->execute(); 
                $stmt->bind_result($em, $pa, $u, $pp, $pai);

                    // Loop through each row in the result set
                    while ($stmt->fetch()) {
                        $gottenEmail = $em;
                        $gottenPass = $pa;
                        $uid = $u;
                        $profile_pic = $pp;
                        $paid = $pai;
                    }

                    $stmt->close();         
    }



    if ($gottenEmail == "" || $gottenPass == "") {
        header("Location: login.php?e=5");
        exit;
        die();
    }



    if (password_verify($password, $gottenPass)) {
        // BRUGER LOGGES IND

        // NÅR BRUGEREN FINDES, OG KODEN ER KORREKT
        if ($uid != "") {

            $_SESSION["user"] = $uid;

            if ($paid == "true") {

                // Bruger har betalt
                if ($profile_pic == "true") {
                    header("Location: user/card.php");
                    exit;
                } else {
                    header("Location: user/profilepic.php");
                    exit;
                }

            } else {

                // Bruger har IKKE betalt   
                header("Location: user/inactive.php");
                exit;
            }


        } else {
            //DER ER SKET EN FEJL, INTET UID
            header("Location: login.php?e=6");
            exit;
            die();
        }


    } else {
        //Oplysningerne er ikke korrekte, har du tastet rigtigt?
        // (Kode ikke korrekt)
        header("Location: login.php?e=5");
        exit;
        die();
    }


?>

Ответы [ 2 ]

1 голос
/ 20 июня 2019

После перенаправления header завершите текущий скрипт, используя exit();

Возможно, вы что-то упустили из этого ответа:

Сессия PHP потеряна после перенаправления

Вы также можете проверить подробное состояние сеанса здесь:

Проверить, начался ли уже сеанс PHP

https://www.w3schools.com/php/php_sessions.asp

ИлиКак и указывал Rikudou_Sennin, вы, должно быть, случайно пропустили где-то строку php session_start(); перед тем, как определить или получить доступ к переменной сеанса / s.

0 голосов
/ 20 июня 2019

1-й Вы должны сохранить учетные данные пользователя, которые вы хотите использовать в дальнейшем, если вводимые пользователем данные для имени пользователя и пароля совпадают с записями в БД с $ _SESSION

include("..\includefiles\db.php");

$email =$_POST["email"];
$password = $_POST["password"];

$sql = "SELECT * FROM member WHERE email ='$email' AND password =  '$password'";
$result = mysqli_query ($con,$sql);
if($row = mysqli_fetch_array($result)){


 $_SESSION['ID'] = $row['id'];
 $_SESSION['NAME'] = $row['name'];
 $_SESSION['ROLE'] = $row['role'];

 if($_SESSION['ROLE']=='a'){

  header("Location: ..\dashBoard.php");
}else{
  header("Location: ..\index.php");
}

После сохранения сеансов все, что вам нужно сделать, это начать сеанс с

session_start()

функция на каждой странице . Обратите внимание, что функция session_start () должна быть самой первой вещью в вашем документе. Перед любыми тегами HTML. А затем проверьте доступность сеанса и, если сеанс не установлен, перенаправьте на страницу входа Смотрите код ниже.

<?php
    session_start();

   if(isset($_SESSION["ROLE"])){    

   }else{
           header("Location: login.php");
       }

   ?>   
      <!DOCTYPE html>

Надеюсь, что вы сможете что-то извлечь из этого.

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