Потеря переменной $ _SESSION на разных страницах

0

Я прихожу к вам абсолютно расстроенным. Я провел дни, просматривая мой код и все вопросы StackOverflow, которые искали следующую проблему:

Функция моего проекта - войти в систему, используя три страницы. Первая страница 1.php имеет поля ввода, которые необходимо заполнить:

<?php
session_start();
session_destroy();

require_once "init.php";
require "header.php";

?>

<form method="POST" action="2.php" enctype="multipart/form-data">
  <table>
     <tr><td>Username</td></tr>
     <tr><td><input type="text" id="user" name="user" value=""/></td></tr>
     <tr><td>Password</td></tr>
     <tr><td><input type="password" id="pass" name="pass" value=""/></td></tr>
     <tr><td><input type="submit" value="Get in"/></td></tr>
  </table>
</form>

Вторая страница 2.php обрабатывает информацию, проверяет правильность имени пользователя и пароля и инициализирует $_SESSION['user'];

<?php
session_start();
session_save_path('/server/path/system/sphp');
//had to change dir due to server restrictions

$username= $_POST['user'];
$user= "cpe12";
$userpass= $_POST['pass'];
$pass= "p2010";

    if($username==$user&&$userpass==$pass){

    $_SESSION['user']= $username;
    echo "<head><meta http-equiv='refresh' content='2; url=3.php'>Loging </head>";
    echo $_SESSION['user'];
    exit();
    }
       elseif ($username!=$user||$userpass!=$pass){
            session_destroy();    
            echo "<head><meta http-equiv='refresh' content='2; url=1.php'>Wrong log in</head>";
            exit();

            } 

?>

И я 3.php содержимое третьей страницы 3.php используя функцию isset.

<?php
session_start();
session_save_path('/server/path/system/sphp');
//I know I could use an include_once instead of these two lines, right?

        error_reporting(E_ALL);
        ini_set('display_errors', 1);

        if (isset($_SESSION['user'])){

             $title= "Copies";
             require "header.php";
             require "content.php";

          }
                else{
                    session_destroy();
                    echo "<head><meta http-equiv='refresh' content='4; url=index.php'>Blocked content.</head>";
                    die();

                }
?>

Всякий раз, когда я пытаюсь войти в систему, он проверяет ok в 2.php но когда он добирается до 3.php он не может войти в систему. На всех страницах есть session_start и session.save_path, написанные как первые две строки без пробелов. Я изменил папку по умолчанию /tmp для session.save_path на server/path потому что /tmp не имел разрешений на запись.

Я мог бы получить некоторую информацию из 2.php и обнаружил, что $_SESSION['user'] выходит из нее ОК, но 3.php никогда не читает ее. Дело в том, что у меня есть еще 6 страниц для доступа к этому сеансу, поэтому мне нужно глобальное решение.

О, и это запутывает: я также создал файл для проверки информации о сеансе (только для информации) с именем check.php со следующим кодом:

<?php

   session_start();
   session_save_path('/server/path/system/sphp');

   echo session_save_path().'<br/>';
   echo $_SESSION['user'].'<br/>';
   echo session_name();

   if (!is_writable(session_save_path())) {
    echo 'Session path "'.session_save_path().'" is not writable for PHP!'; 
   }

   ?>

Теперь, если я сначала очистку истории и данных браузера, а затем введите www.myweb.com/check.php в URL-адрес, я вижу отсутствующую информацию, так как $_SESSION['user'] и т.д. Еще не созданы. Если впоследствии я попытаюсь войти в систему, удивительно начнет подписываться как шарм, несмотря ни на что. Сначала я должен получить доступ к check.php в своем браузере, чтобы иметь возможность войти в систему. Но если я снова check.php историю браузера и данные, он не позволит мне войти в систему больше.

error_reporting в состояниях 3.php: Notice: Undefined index: user in "/server/path/system/3.php in line 34

Может это что-то о моем сервере? Что-то о save_handlers? Это мой первый вход в систему, и я прошел через ад. Я думаю, это будет долгий путь. У меня больше нет вариантов или знаний. Ты моя последняя мера.

Спасибо, парни!

Теги:
session

2 ответа

0
Лучший ответ

Это никогда не случалось в моей жизни раньше. Я скопировал код из 2.php и вставил его в другой файл, который называется try.php (тот же самый код). Я перенаправил 1.php, чтобы проверить try.php, а затем перенаправить на 3.php. Это сработало. Теперь я не понимаю, что может быть исправлено, копируя один и тот же код в другой файл (я буквально проверял строку за строкой), поэтому я очень смущен. Но хорошо, теперь работает как шарм.

2

session_save_path() необходимо вызвать до session_start().

См. Http://php.net/manual/en/function.session-save-path.php

Так

session_save_path('/server/path/system/sphp');
session_start();
  • 0
    Мой босс задал вопрос, задерживающий меня. Ты подтолкнул меня на это. Приветствую вас, мой дорогой сэр.
  • 0
    спасибо @MichaelDibbets
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню