У меня возникла очень странная проблема с функциями php-сессии.
Прежде всего: он работает только в определенных браузерах. Как и случайный, выбранный: FF на окнах, но не на Mac, Chrome на обеих платформах, Safari не работает, однако IE.
У меня есть сценарий входа, где я создаю сеанс, если данные для входа верны:
session_start();
$_SESSION['username'] = $user_info['username'];
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
Когда я делаю print_r в сценарии входа, после установки переменных сеанса он работает для всех браузеров. Но после перенаправления пользователя на главный сайт сеанс пуст для некоторых браузеров....
У меня никогда не было такой проблемы, и я действительно не знаю, что делать...
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, я проверяю, что я верну, если у него есть имя пользователя, используйте это. Если он пуст, имя_соединения останется пустым, потому что он будет проверяться позже с этим именем пользователя, если я вошел в систему. Затем я обновляю базу данных с именем пользователя, временем и т.д.
session_start();
?