Возникла проблема со страницей входа - PullRequest
1 голос
/ 31 августа 2011

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

if (isset($_SESSION['id'])) 
{echo $_SESSION['id']; die();}

в начале страницы индекса для проверки. Но это ничего не отражает.
Мой скрипт входа выглядит так:

<?php
include '../includes/common.php';
$page='signin';
$err = array();

foreach($_GET as $key => $value) {
    $get[$key] = filter($value);
}

if ($_POST['dologin']=='Daxil ol') {
    foreach($_POST as $key => $value) {
        $data[$key] = filter($value);
    }

    $login = $data['login'];
    $pass = $data['pwd'];


    if (strpos($login,'@') === false) {
        $user_cond = "login='$login'";
    } else {
        $user_cond="email='$login'";
    }

    $result = $db->query("SELECT `id`,`pwd`,`fname`,`lname`,`approved`,`type`,`level` FROM users WHERE $user_cond AND `ban` = '0'") or die($db->error());

    $num = $result->num_rows;

    if ($num > 0 ) {
        list($id,$pwd,$fname,$lname,$approved, $type, $level) = $result->fetch_row();
        if (!$approved) {
            $err[] = 6;
        }
        if ($pwd === PwdHash($pass,substr($pwd,0,9))) {
            if (empty($err)) {

                session_start();
                session_regenerate_id(true);

                $_SESSION['id']= $id;
                $_SESSION['fname'] = $fname;
                $_SESSION['lname'] = $lname;
                $_SESSION['type'] = $type;
                $_SESSION['level'] = $level;
                $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);

                $stamp = time();
                $ckey = GenKey();
                $db->query("update users set `ctime`='$stamp', `ckey` = '$ckey' where id='$id'") or die($db->error());

                //set a cookie

                if (isset($_POST['remember'])) {
                    setcookie("id", $_SESSION['id'], time()+60*60*24*COOKIE_TIME_OUT, "/");
                    setcookie("key", sha1($ckey), time()+60*60*24*COOKIE_TIME_OUT, "/");
                    setcookie("fname",$_SESSION['fname'], time()+60*60*24*COOKIE_TIME_OUT, "/");
                }
                header("Location: ../../../index.php");
            }
        } else {
            $err[] = 7;
        }
    } else {
        $err[] = 8;
    }
    if (!empty($err)) {
    include "../includes/error.php";
    }

} 
?>

Проверен лог ошибок php. Нет ошибок. Также проверил таблицы БД MySql. Устанавливает ctime и ckey. Входная часть работает (я думаю). Функция фильтра от common.php (для очистки данных поста)

Ответы [ 2 ]

2 голосов
/ 31 августа 2011

Вам необходимо начать сеанс (даже перед отправкой каких-либо заголовков на страницу). Вам также нужно начинать сеанс на каждой странице, где вам нужны данные сеанса, если только у вас не установлена ​​директива автоматического запуска сеанса *1002*, установленная в true

<?php
session_start();
//$_SESSION data available here!
?>
<html>...
<?
   //other php code
   //$_SESSION data available here!
?>
...</html>

0 голосов
/ 31 августа 2011

Похоже, вам не хватает session_start() в начале обоих файлов.

PHP не будет передавать информацию о сеансе, если этот вызов функции отсутствует.Рекомендуется, чтобы этот вызов был первым в файле.

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