繁体   English   中英

会话第一次不起作用,但第二次起作用

[英]Session not working the first time but second time it works

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

我发现当用户登录并获取第一个用户页面 card.php 时,会话 ID 会发生变化。 例如,在访问 subscription.php 时,无论出于何种原因,会话 ID 都不同。

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


登录用户登录.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();
    }


?>

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

也许你错过了这个答案的一些东西:

重定向后PHP会话丢失

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

检查 PHP 会话是否已经启动

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

或者,正如 Rikudou_Sennin 指出的那样,您一定是在 php 行session_start();某处不小心遗漏了session_start(); 在定义或访问会话变量之前。

第一,如果用户输入的用户名和密码与 $_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>

希望你能从中得到一些东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM