Я разрабатываю веб-приложение с использованием PHP, в котором пользователь сначала должен войти в систему и просмотреть свой контент. Я использую сеансы 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";
    }
?>

Спасибо.

0
Deepal 2 Янв 2014 в 12:43

2 ответа

Лучший ответ

Я наконец нашел ответ, который на самом деле мой плохой. Я не упомянул последнюю часть файла index.php, поскольку считаю, что эта часть не имеет значения.

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

Прокомментировав этот вызов метода session_destroy (), я смог решить свою проблему и сохранить сеанс в рабочем состоянии.

Извините за неполный код.

2
Deepal 3 Янв 2014 в 05:02

Попробуй это

class Sessions{
  public static function setSessionState($userdata){
     if ( !isset($_SESSION['user']) ) {
        $_SESSION['user'] = $userdata;
     }
  }
}
0
tonoslfx 2 Янв 2014 в 20:36