Когда пользователь регистрируется, переменные сеанса не сохраняются

На моем сайте у меня есть проблема, когда новый участник регистрируется, он должен направлять их на страницу своего профиля, и их данные должны подтягиваться.

В настоящее время он перенаправляет их на страницу своего профиля, за исключением того, что там написано «Этот пользователь не существует». потому что кажется, что он не сохраняет переменные сеанса. Если я выйду из этого нового члена и снова войду в него, то все будет работать правильно с новым сеансом.

Чем это вызвано? Вот некоторый код, который может помочь в решении проблемы. Если вам нужен дополнительный код, сообщите мне об этом. К вашему сведению, путь таков, что они переходят на страницу register.php, а затем перенаправляются на страницу profile.php, поэтому я также предоставлю код profile.php.

функция:

//adds a user to the database
    function add_user($user, $pass){
    $user = mysql_real_escape_string(htmlentities($user));
    $pass = sha1($pass);   
    mysql_query("INSERT INTO `users` (`user_name`, `user_password`) VALUES ('{$user}',     '{$pass}')");
    }

Код для register.php:

<?php

include('core/init.inc.php');

$errors = array();

if (isset($_POST['username'], $_POST['password'], $_POST['repeat_password'])){
if (empty($_POST['username'])){

    $errors[] = 'The username cannot be empty.';    
}

if (empty($_POST['password']) || empty($_POST['repeat_password'])){

    $errors[] = 'The password cannot be empty.';
}

if ($_POST['password'] !== $_POST['repeat_password']){

    $errors[] = 'Password verification failed.';
}

if (user_exists($_POST['username'])){

    $errors[] = 'The username you entered is already taken.';
}

if (empty($errors)){
    add_user($_POST['username'], $_POST['password']);

    $_SESSION['username'] = htmlentities($_POST['username']);

    header('Location: profile.php');
    die();
}
}
?>

Код profile.php:

<?php 

include('core/init.inc.php');    
if (isset($_GET['uid']) && $_GET['uid'] !='')
{
$user_info = fetch_user_info($_GET['uid']);
}
else
{
$user_info = fetch_user_info($_SESSION['uid']);
}    
?>

функция fetch_user_info: // извлекает информацию о профиле для данного пользователя function fetch_user_info($uid){ $uid = (int)$uid;

    $sql = "SELECT
                                    `user_name` AS `username`,
                                    `user_firstname` AS `firstname`,
                                    `user_lastname` AS 'lastname',
                                    `user_email` AS `email`,
                                    `user_about` AS `about`,
                                    `user_location` AS `location`,
                                    `user_gender` AS `gender`
                            FROM `users`
                            WHERE `user_id` = {$uid}";
    $result = mysql_query($sql);
    return mysql_fetch_assoc($result);
}

init.inc.php

<?php

session_start();

$exceptions = array('register', 'login', 'find', 'profile');

$page = substr(end(explode('/', $_SERVER['SCRIPT_NAME'])), 0, -4);

mysql_connect('localhost', 'root', 'root');
mysql_select_db('user_system');

$path = dirname(__FILE__);

include("{$path}/inc/user.inc.php");


if (isset($_COOKIE['username'], $_COOKIE['password']) && isset($_SESSION['username']) === false){

    if ($uid = valid_credentials($_COOKIE['username'], $_COOKIE['password'])){

            $_SESSION['username'] = htmlentities($_COOKIE['username']);
            $_SESSION['uid'] = $uid;
            setcookie('username', $_COOKIE['username'], time() + 604800);
            setcookie('password', $_COOKIE['password'], time() + 604800);
    }
}

if (in_array($page, $exceptions) === false){

 if (isset($_SESSION['username']) === false){

           header('Location: login.php');
           die();
    }
}



?>

person soshannad    schedule 19.01.2012    source источник
comment
Вы звоните session_start()?   -  person Explosion Pills    schedule 19.01.2012
comment
Нет, я не вызывал это в register.php или profile.php, но я просто попытался добавить это, и, к сожалению, это не решило проблему.   -  person soshannad    schedule 19.01.2012


Ответы (2)


Во-первых, содержит ли include('core/init.inc.php'); (или какой-либо другой файл) session_start() Без вызова session_start() ваш $_SESSION будет пуст.

Второе: я никогда не видел, чтобы ты назначал $_SESSION['uid']. Вы перенаправляете на свой профиль с помощью $_GET['uid']?

Потому что в Registration.php вы устанавливаете $_SESSION['username'], а затем выполняете перенаправление. Вы также можете установить $_SESSION['uid'] перед выполнением перенаправления.

person pdu    schedule 19.01.2012
comment
позвольте мне выяснить, как показать вам дополнительный код. Я опубликую это в ближайшее время. - person soshannad; 19.01.2012
comment
Я также добавил $_SESSION['uid'] = $_POST['user_id']; перед перенаправлением на register.php, но это не решило проблему. - person soshannad; 19.01.2012
comment
не могли бы вы сделать var_dump($_SESSION) и проверить, есть ли набор uid? - person pdu; 19.01.2012
comment
Если я делаю vardump и регистрирую нового пользователя, он говорит, что профиль не существует, но vardump говорит: array(1) {[username]=>string(4) test } и test это имя новой учетной записи Я сделал. - person soshannad; 19.01.2012
comment
Я добавил запрос на получение uid, и теперь он говорит: array(2) { [username]=›string(5) test2 [uid]=› NULL } Я добавил следующий запрос: $_SESSION['uid'] = $ _GET['идентификатор']; - person soshannad; 19.01.2012
comment
@soshannad Я думаю, ты немного все испортил. сделайте вдох и повторите попытку ;-) если у вас нет GET или POST для uid, вы назначаете null значений. вы можете изменить add_user();, чтобы вернуть uid, который есть у добавленного пользователя, и назначить его переменной сеанса перед перенаправлением. - person pdu; 19.01.2012

Во-первых, попробуйте это в add_user :

//adds a user to the database
function add_user($user, $pass){
    $user = mysql_real_escape_string(htmlentities($user));
    $pass = sha1($pass);   
    mysql_query("INSERT INTO `users` (`user_name`, `user_password`) VALUES ('{$user}',     '{$pass}')");
    return mysql_insert_id();
}

Во-вторых, в register.php:

[...]
if (empty($errors)){
    $_SESSION['uid'] = add_user($_POST['username'], $_POST['password']);
    $_SESSION['username'] = htmlentities($_POST['username']);

    header('Location: profile.php');
    die();
}

Убедитесь, что у вас есть session_start() на всех страницах, которым требуется доступ к сеансу.

Надеюсь, поможет!

person capi    schedule 19.01.2012