会话第一次无效,但第二次有效

时间:2019-06-20 13:58:02

标签: php session

当用户登录时,从会话中检索数据的第一页就可以了。当我转到另一页时,会话为空白。

我发现,当用户登录并获得第一个用户页面card.php时,会话ID会更改。例如,当进入subscription.php时,由于任何原因会话ID都会不同。

我试图在下面列出有用的代码:


log-user-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 个答案:

答案 0 :(得分:1)

header重定向之后,使用exit();结束当前脚本

也许您错过了此答案中的某些内容:

PHP session lost after redirect

您还可以在此处查看详细的会话状态:

Check if PHP session has already started

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

或者,正如Rikudou_Sennin所指出的那样,在定义或访问会话变量之前,您必须在php行session_start();的某个地方意外地省略了它。

答案 1 :(得分:0)

1st如果用户名和密码的用户输入与带有$ _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>

希望您可以从中获得一些东西。