Сессия не сохраняется для всего сайта

0

У меня возникла очень странная проблема с функциями php-сессии.

Прежде всего: он работает только в определенных браузерах. Как и случайный, выбранный: FF на окнах, но не на Mac, Chrome на обеих платформах, Safari не работает, однако IE.

У меня есть сценарий входа, где я создаю сеанс, если данные для входа верны:

session_start();
$_SESSION['username'] = $user_info['username'];

echo "<pre>";
print_r($_SESSION);
echo "</pre>";

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

У меня никогда не было такой проблемы, и я действительно не знаю, что делать...

  • 0
    Когда вы говорите «перенаправление пользователя на основной сайт», это другой сайт? Как вы их перенаправляете?
  • 1
    Не совсем понятно, что вы спрашиваете. Вы начинаете каждую страницу с session_start(); ?
Показать ещё 4 комментария
Теги:
session

1 ответ

1
session_start();
$_SESSION['username'] = $user_info['username'];

echo "<pre>";
print_r($_SESSION);
echo "</pre>";

Если это то, что начинается с каждой страницы, я могу понять, что вы больше ничего не видите после обновления, просто потому, что вы начинаете свой сеанс, вы устанавливаете переменную $ _SESSION Username в $ User_info с именем пользователя переменной. И вы делаете это каждый раз.

Но учтите следующее: ваша переменная вообще не указана. Возможно, вы настроили его при входе в систему, однако вы очистите его inmideatly при следующем обновлении, заставив вас снова использовать этот $ user_info ['username']. В этом случае, если ничего не называть forhand, это будет пустая переменная. Таким образом, ваше имя пользователя будет пустым.

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

Поскольку вы установили его при входе в систему, нет необходимости его устранять, потому что ваш сеанс ['username'] уже установлен

редактировать

поэтому я спрашиваю сейчас, что вы помещаете в свою базу данных? Вы сохраняете SessionId в своей БД? Потому что тогда вы можете сделать что-то вроде этого.

session_start();

$Session=session_id();  
$result1 = LoadSessionData($Session);
$count=mysqli_num_rows($result1);
if($count=="0"){
    $Time=time();
    $Ip = $_SERVER['REMOTE_ADDR'];
    StartSessionData($Session,$Time,$Ip);
    $_SESSION['Username'] = '';
}else{
    while ($row1 = mysqli_fetch_array($result1)){       
        $UserName = $row1['GebruikerNaam'];
        if ($UserName == ""){
            $_SESSION['Username'] = '';
        }
        $Time=time();
        $Time_check=$Time-3600;
        $Ip = $_SERVER['REMOTE_ADDR'];
        OnlineChecker($Session,$UserName,$Time,$Ip);
    }
}

Надеюсь, вы сможете следовать за ним, но я попытаюсь объяснить. Он проверяет, находится ли sessionId в базе данных, если нет, добавьте идентификатор сеанса в базу данных вместе с меткой времени, ip и именем пользователя сеанса, который установлен в пустую.

Else, я проверяю, что я верну, если у него есть имя пользователя, используйте это. Если он пуст, имя_соединения останется пустым, потому что он будет проверяться позже с этим именем пользователя, если я вошел в систему. Затем я обновляю базу данных с именем пользователя, временем и т.д.

  • 0
    Я просто использую этот код в сценарии входа. На любом другом сайте я просто использую print_r, чтобы посмотреть, работает ли он
  • 0
    Не могли бы вы опубликовать то, как вы начинаете каждую страницу? Потому что ваша ошибка может быть там. Технически, вы показываете нам сейчас работающий код :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню