PHP中的页面刷新会破坏会话

时间:2014-01-02 08:43:46

标签: php session

我正在使用PHP开发一个Web应用程序,用户最初必须登录并查看其内容。我正在使用PHP会话来维护状态。我遇到了以下问题:

  1. 虽然我在每个页面上启动了会话,并且在设置了相关会话变量之后,每次刷新页面或在不同选项卡上浏览相同的URL时都会销毁会话。
  2. 当用户浏览登录页面并且他已经登录时,我需要将用户重定向到他的内容页面。
  3. 我是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";
        }
    ?>
    

    谢谢。

2 个答案:

答案 0 :(得分:2)

我终于找到了答案,这实际上是我的坏事。我没有提到index.php文件的最后一部分,因为我虽然那部分是无关紧要的。在那部分我有一个部分,

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

在评论session_destroy()方法调用之后,我可以解决我的问题并使会话保持活动状态。

抱歉代码不完整。

答案 1 :(得分:0)

试试这个

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