簡體   English   中英

PHP中的頁面刷新會破壞會話

[英]Session is destroyed on page refresh in PHP

我正在使用PHP開發一個Web應用程序,用戶最初必須登錄並查看其內容。 我正在使用PHP會話來維護狀態。 我遇到了以下問題:

  1. 雖然我在每個頁面上啟動了會話,並且在設置了相關會話變量之后,每次刷新頁面或在不同選項卡上瀏覽相同的URL時都會銷毀會話。
  2. 當用戶瀏覽登錄頁面並且他已經登錄時,我需要將用戶重定向到他的內容頁面。

我是PHP的新手,所以我不知道如何解決這些問題。 我在stackoverflow中提到了幾個問題,但他們都說會話不會在頁面刷新時被銷毀。 我無法理解我的頁面出了什么問題。 非常感謝任何有解釋的解決方案。

登錄頁面

<?php

session_start();

class Sessions{
        public static function setSessionState($userdata){
            unset($userdata['password']);
            unset($userdata['timestamp']);
            $_SESSION['user']=$userdata;
        }
    }

if(isset($_POST['username']) && isset($_POST['password'])){
        $dbcon = new DBConnection();
        $dbcon->connect();
        $username= strip_tags(stripslashes(trim($_POST['username'])));
        $password = strip_tags(stripcslashes($_POST['password']));
        echo "<script>alert($username);</script>";
        $result = $dbcon->getUser($username,$password);
        if(mysqli_num_rows($result)==1){
            $user = $dbcon->getUserData($result);     #getUserData function accepts mysqli result as an input and returns a row(array) of user details.
            if(isset($user)){
                Sessions::setSessionState($user);
                header("location:index.php");
            }
            else{
                echo "user variable is not set!!!";
            }
        }
        else if(mysqli_num_rows($result)==0){
            echo "Login error! Username or Password incorrect!";
        }
        else{
            die("Unknown Error occured!");
        }
    }
............

索引頁面(用戶的私有內容可見)

<?php 

    session_start();

    if(isset($_SESSION['user'])){
        print_r($_SESSION['user']);
    }
    else{
        echo "session variable not set";
    }
?>

謝謝。

我終於找到了答案,這實際上是我的壞事。 我沒有提到index.php文件的最后一部分,因為我雖然那部分是無關緊要的。在那部分我有一個部分,

<form action="<?php session_destroy(); ?>">

在評論session_destroy()方法調用之后,我可以解決我的問題並使會話保持活動狀態。

對不起,代碼不全。

嘗試這個

class Sessions{
  public static function setSessionState($userdata){
     if ( !isset($_SESSION['user']) ) {
        $_SESSION['user'] = $userdata;
     }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM