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

#php #jquery #file-handling

Вопрос:

Я прикрепил свою страницу PHP здесь: Это страница после входа в систему:

     <?php
    session_start();
    $url = "../../signin.html";
    $font = "Montserrat";
    $logout = "logout.php";
    $name = $_SESSION["username"];
    
    $index = strpos($name,"@");
$user = substr($name,0,$index);


$file="";
$target = "uploads/";
$log = $_SESSION['loggedin'];

if(isset($_FILES["file"]["name"])){
    if($_SESSION["loggedin"]==1){
        
    $ext = pathinfo($_FILES["file"]["name"],PATHINFO_EXTENSION);
    if($_FILES["file"]["size"]>80000000){
        echo "<script>alert('Select files less than 10mb.')</script>";
    }

    elseif($ext=="pptx"){
        $target = "uploads/ppt/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    elseif($ext=="txt"){
        $target = "uploads/txt/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    elseif($ext=="jpg"||$ext=="jpeg"){
        $target = "uploads/jpg/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    elseif($ext=="docx"){
        $target = "uploads/word/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    elseif($ext=="exe"){
        $target = "uploads/exe/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    elseif($ext=="pdf"){
        $target = "uploads/pdf/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    elseif($ext=="mp4"){
        $target = "uploads/mp4/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    elseif($ext=="mp3"||$ext=="wav"){
        $target = "uploads/music/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    elseif($ext=="xlsx"){
        $target = "uploads/excel/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    else{
        $target = "uploads/others/";
        $file = $target . basename($_FILES["file"]["name"]);
    }
    
    
        if(move_uploaded_file($_FILES["file"]["tmp_name"], $file)){
            echo "<script>alert('File uploaded successfully.')</script>";
        }
        
        
        elseif($_FILES["file"]["size"]==0){
            echo "<script>alert('No Files Selected.')</script>";
        }
        else{
        echo "<script>alert('File already exists.')</script>";
        }
    }


}

    if ($_SESSION["loggedin"]!=1) {
        
        header("Location: $url");
        
        exit;
    }    

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Personal Drive</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP u1T9qYdvdihz0PPSiiqn/ /3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" integrity="sha512-1ycn6IcaQQ40/MKBW2W4Rhis/DbILU74C1vSrLJxCq57o941Ym01SwNsOMqvEBFlcgUa6xLiPY/NS5R E6ztJQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />
    <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,500;1,600;1,700;1,800;1,900amp;display=swap" rel="stylesheet">
    <link rel="stylesheet" href="../../drive.css">
</head>
<body>
    <div class="d-flex" class="mynav">
  <div class="p-2 ml-auto header" >Welcome <?php echo $user; ?></div>
  <div class="p-2 ml-auto" id="logout" onclick="login()"><i class="fas fa-sign-out-alt" id="logout_btn"></i><br><span id="logout_span">Logout</span></div>
</div>

    </div>
    <div class="container" id="alert">
    <div class="alert alert-success alert-dismissible fade show" style="padding-left:20px;font-size:18px;">
    <button type="button" class="close" data-dismiss="alert">amp;times;</button>
    <strong style="margin-right:05px;">Alert! </strong>  Logout from your account before closing the tab.
  </div>
  </div>
  <form method="" action="" enctype="multipart/form-data">
    <div id="upload_btn">
        <label for="file" id="file-btn"><i class="fas fa-plus"></i> Add File</label>
        <div id="filename">No files selected..</div>
        <input type="file" id="file" style="display:none;" oninput="myfile()" name="file">
        <button type="button" id="up_btn" name="upload" class="btn btn-primary"><i class="fas fa-cloud-upload-alt"></i> Upload</button>
    </div>
    </form>
    <script>
    $("button").click(function() {
                var fd = new FormData();
                var files = $('#file')[0].files[0];
                fd.append('file', files);
       
                $.ajax({
                    url: '',
                    type: 'post',
                    data: fd,
                    contentType: false,
                    processData: false,
                    success: function(e){
                       $("body").html("<div>" e "</div>");
                    },
                });
            });
            function myfile(){
            $.post(
                "../../upload.php",
                {view:$("#file").val()},
                function(e){
                    $("#filename").html("<span style='font-weight:600; font-size:20px;'>" e "</span>");
                }
                );
        }
        
        function login(){
            <?php
            session_destroy();
            ?>
            window.location.href = "../../signin.html";
        }
    
    </script>
</body>
</html>
    
 

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

Моя цель-разрешить пользователю загружать свои файлы до тех пор, пока он не нажмет кнопку «Выход». И по соображениям безопасности доступ могут получить только подписанные пользователи, поэтому я использовал сеанс. Но когда я загружаю файл, страница возвращается на signin.html.

При входе в систему signin.html

Страница

После загрузки файла

signin.php:

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Database Signin</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.0/css/bootstrap.min.css" integrity="sha512-F7WyTLiiiPqvu2pGumDR15med0MDkUIo5VTVyyfECR5DZmCnDhti9q5VID02ItWjq6fvDfMaBaDl2J3WdL1uxA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
    <link rel="stylesheet" href="style.css">
</head>
<body>
    
    <form action="signin.php">
        <header>Database Login</header>
        <br>
        <label for="username">Enter Email</label><br>
        <input type="email" name="email" id="email"/><br>
        <span class="error_viewer" id="em_err"></span>
        <br>
        <label for="pass">Enter Password</label><br>
        <input type="password" name="pass" id="pass"><br>
        <span class="error_viewer" id="pass_err"></span><br>
        <button type="button" class="btn btn-primary" id="signin_btn">Login</button><br>
        <a href="index.html" style="margin-left: 25px;">New user? Register</a>
    </form>

    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.1.0/js/bootstrap.min.js" integrity="sha512-NWNl2ZLgVBoi6lTcMsHgCQyrZVFnSmcaa3zRv0L3aoGXshwoxkGs3esa9zwQHsChGRL4aLDnJjJJeP6MjPX46Q==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP u1T9qYdvdihz0PPSiiqn/ /3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
    
    <script src="validator.js"></script>
    <script>
        $("input").focus(e=>{
            $(".error_viewer").text("");
        });
        $("#signin_btn").click(e=>{
            
            if(ValidateEmail($("#email").val())==false){
                $("#em_err").text('Enter Valid email');
            }
            if($('#email').val()==""){
                 $("#em_err").text('Enter email');

            }
            if($("#pass").val()==""){
                $("#pass_err").text("Enter Password");
            }
            else{
                $.post(
                    "signin.php",
                    {
                        em:$("#email").val(),
                        pass:$("#pass").val()
                    },
                    function(e){
                        
                        if(e=="0"){
                            $("#em_err").text("Username didn't exist")
                        }
                        else if(e=="-1"){
                            $("#pass_err").text("Incorrect Password");
                            $("#pass").val('');
                        }
                        else{
                            location.href = e;
                        }
                        
                    }
                );
            }
        });
        
    </script>
    
</body>
</html>
 

Комментарии:

1. Пожалуйста, поделитесь минимальным количеством кода. Страница входа не содержит процесса уничтожения сеанса. Проверьте наличие функции session_destroy (); ., которая используется для уничтожения целых сеансов.

2. Спасибо, я постараюсь это сделать

3. Но если я уничтожу сеанс при самой регистрации, это не позволит перейти на нужную страницу.