Сессии PHP: объяснение, пожалуйста? - PullRequest
1 голос
/ 27 января 2011

Я немного изучаю PHP, и по большей части все идет очень легко.Единственное, на чем я зациклен - это заставляю сессии работать.Google безжалостен в этом начинании.

Это может быть одной из двух причин;синтаксис или мое программное обеспечение.В настоящее время я создаю локальный веб-сайт с помощью EasyPHP 5.3.5.0 на компьютере, который не подключен к Интернету.Подключение его к интернету не вариант.

В настоящее время я знаю о сессиях, что многие синтаксисы, связанные с ними, устарели, заменены суперглобальным массивом $_SESSION, который намного проще в использовании.start_session(); должно быть перед любым синтаксисом, относящимся к сеансам.Тем не менее, мой сценарий входа не устанавливает сеанс, так как быстрый !isset ($_SESSION['username']) всегда возвращает true.

Мой сценарий настроен так:

PHP include для login.php, которыйэто форма.check_login.php - это то, что проверяет его, и если запрос возвращает одну строку, он перенаправляет на login_success.php, который устанавливает сеанс, выдает приветственное сообщение, а затем перенаправляет (используя JavaScript) на домашнюю страницу.

Любойидеи?

ПРАВКА, чтобы включить дополнительную информацию:

Вот краткий обзор моего кода:

index.php:

include 'main_login.php';

main_login.php:

if(!isset ($_SESSION['username'])){
...
Login form, action="cehcklogin.php" method="post"
...
}else{
var_dump ($_SESSION): // Just to see if it works
}

checklogin.php:

Connect to SQL
$username = $_POST['username'];
$password = $_POST['password'];

$username / $password stripslashes / mysql_real_escape_string

Query to find the username & password

$count = mysql_num_rows($result);

if($count = 1){
$_SESSION["username"] = $username;
$_SESSION["password"] = $password;
header("location:login_success.php");
}else{
echo "Wrong Username or Password."
}

login_success.php:

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

session_start();
var_dump($_SESSION); //This works
if(!isset ($_SESSION['username'])){
header("location:index.php");
}

Javascript redirect, and a welcome message appears.

Все работает, пока вы не попадете на домашнюю страницу, которая должна быть установлена ​​$_SESSION['username'], и не должна отображать форму, но это так.

Ответы [ 2 ]

6 голосов
/ 29 января 2011

Похоже, вы не используете session_start() в вашем main_login.php, как на etranger, на который ссылаются. Вам необходимо вызывать эту функцию в начале каждого нового запроса, чтобы начать использовать сеансы.

В противном случае, если вы звоните session_start() и просто не указали его в примере кода, возможно, идентификатор сеанса теряется во время перенаправления. Используете ли вы сеансы на основе файлов cookie или передаете идентификатор сеанса в качестве параметра URL? Попробуйте напечатать session_id() или SID вверху каждой страницы. Это сообщит вам, когда сеанс потерян (идентификатор сеанса изменится или будет "").

Если вы используете сеансы на основе файлов cookie, возможно, файл cookie по какой-то причине теряется. Если вы используете параметр URL для передачи идентификатора сеанса, возможно, поддержка прозрачного идентификатора сеанса работает неправильно.

1 голос
/ 28 января 2011

Вы должны позвонить session_start() как можно раньше, и определенно перед использованием $_SESSION, который в противном случае был бы пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...