2015-03-27 2 views
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 содержимое, используя 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(); 

       } 
?> 

Всякий раз, когда я пытаюсь войти в систему он проверяет нормально в 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 в своем браузере, чтобы иметь возможность войти в систему. Но если я снова очищу историю браузера и данные, он больше не позволит мне входить в систему.

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

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

Спасибо, ребята!

ответ

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

Мой босс задал вопрос, задерживающий меня. Ты подтолкнул меня на это. Оказывается вам, мой дорогой сэр. – Tschallacka

+0

спасибо @MichaelDibbets – Raja

+0

@MichaelDibbets Я уже пробовал это, но у меня такая же проблема. Я также создал php.ini, но то же самое. –

Смежные вопросы