Сессия PHP не регистрируется

Возможный дубликат:
Предупреждение о побочном эффекте сеанса PHP с глобальными переменными как источник данных

У меня проблема с скриптом входа, который я использую. Проблема заключается в том, что некоторые хостинг-провайдеры после входа в систему сеанс не регистрируется. и в журналах ошибок php я вижу эту ошибку

PHP Предупреждение: Неизвестно: ваш скрипт, возможно, полагается на побочный эффект сеанса, который существовал до PHP 4.2.3. Пожалуйста, имейте в виду, что расширение сеанса не рассматривает глобальные переменные как источник данных, если только register_globals не включен. Вы можете отключить эту функциональность и это предупреждение, установив session.bug_compat_42 или session.bug_compat_warn в выключенном состоянии, соответственно, в Unknown в строке 0

но в большинстве хостингов, таких как bluehost, hostmonster работает нормально, без ошибок. может кто-то указать мне, что это не то, что я здесь делаю? заранее благодарю.

Код:

<? session_start(); ob_start(); ?> <?php $err=isset($_GET['error'])?$_GET['error']:""; if($err=='error'){?> <div class="errormsgbox">Wrong Username or Password. Please try again.</div> <?php } if(!isset($_SESSION['adminuser'])){ if($_SERVER["REQUEST_METHOD"] == "POST") { // username and password sent from Form $adminuser=mysql_real_escape_string($_POST['adminuser']); $adminpassword=mysql_real_escape_string($_POST['adminpassword']); $gpassword=md5($adminpassword); // Encrypted Password $sql="SELECT id FROM admin WHERE adminuser='$adminuser' and adminpassword='$gpassword'"; $result=mysql_query($sql); $count=mysql_num_rows($result); // If result matched $username and $password, table row must be 1 row if($count==1) { session_register("adminuser"); header("location:index.php"); } else { header("location:login.php?error=error"); } } ob_end_flush(); ?> <form action="login.php" method="post"> <div class="login_input"> <label class="loginlbl" for="adminuser">UserName :</label> <input type="text" name="adminuser"/> </div> <div class="login_input"> <label class="loginlbl" for="adminpassword">Password :</label> <input type="password" name="adminpassword"/> </div> <div class="login_submit"> <input type="submit" id="submit" value=" Login to Admin Contol Panel"/> </div> </form> <?php }else{ header("location:index.php"); } ?> 

Solutions Collecting From Web of "Сессия PHP не регистрируется"

Использование session_register устарело, как указано в PHP: SESSION_REGISTER

Вы должны использовать:

 //session_register("adminuser"); //deprecated $_SESSION["adminuser"] = $adminuser; 

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

РЕДАКТИРОВАТЬ

Вы можете отключить это предупреждение, добавив следующее:

 ini_set('session.bug_compat_warn', 0); ini_set('session.bug_compat_42', 0); 

или исправить свой код, чтобы не использовать переменную сценария имени и сеансового ключа, то есть это вызовет это предупреждение:

 $_SESSION['foo'] = false; $foo = 0; 

наследие от PHP4 …

Руководство по session_register :

Эта функция была DEPRECATED с PHP 5.3.0 и удалена с PHP 5.4.0.

Просто используйте $_SESSION['adminuser'] поскольку вместо этого вы будете использовать любую другую переменную.

Проблема в том, что у вас есть переменная с тем же именем, что и обычная переменная.

 $_SESSION['yourvar'] = null; $yourvar = 'something'; 

Предупреждение о побочном эффекте сеанса PHP с глобальными переменными как источник данных

А также:

session_register не рекомендуется использовать $_SESSION['yourvar'] . Ошибка регистрации сеанса функции вызывает ошибку.

Не ответ, а предупреждение, которое не вписывается в комментарий:

Вы делаете обработку пароля назад. Вы убегаете, ТОГДА md5-ing. Это неверно. Рассмотрим простой пароль:

 o'brien 

который ускользает от

 o\'brien 

а затем md5'd. Эта обратная косая черта станет ЧАСТЬю хэш-значения:

 o'brien -> 255740509ca6c0e7d86c88fc4d8ddf9d o\'brien -> afd5c6601a6df7e48d0ce5584b10bf12 

обратите внимание, что значения хэша совершенно разные. Это может обернуться и укусить вас, если вы сравните хешированные значения в другом месте и забудете этап побега.