Я прихожу к вам абсолютно расстроенным. Я провел дни, просматривая мой код и все вопросы 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
? Это мой первый вход в систему, и я прошел через ад. Я думаю, это будет долгий путь. У меня нет больше вариантов или знаний для применения. Ты моя последняя мера.
Спасибо, ребята!
Мой босс задал вопрос, задерживающий меня. Ты подтолкнул меня на это. Оказывается вам, мой дорогой сэр. – Tschallacka
спасибо @MichaelDibbets – Raja
@MichaelDibbets Я уже пробовал это, но у меня такая же проблема. Я также создал php.ini, но то же самое. –