2014-10-06 6 views
0

Я прочитал это раньше:session_start() создает новую сессию каждый перезагружать

How to fix “Headers already sent” error in PHP

У меня есть страница сеанса, когда я обновить/перезагрузить его, он создает новый идентификатор сессии!

<?php 

$islogin=0; 
$idadmin=0; 
session_start(); 
$sid=session_id(); 
include("connect.php"); 
$result=mysql_query("select * from session_noti where sid='$sid'",$cn); 


if(mysql_num_rows($result) > 0){ 
    $row=mysql_fetch_object($result); 

    $islogin=$row->islogin; 
    $idadmin=$row->idadmin; 

}else{ 
    if(mysql_query("insert into session_noti (sid,islogin) values ('$sid',0);")){ 
    }else{ 

    } 
} 

[email protected]$_COOKIE["*****"]; 
if($user_cookie != ''){ 
    $user_cookie_res=mysql_query("select * from session_noti where sid='$user_cookie'"); 
    $user_cookie_row=mysql_fetch_object($user_cookie_res); 

    $islogin=$user_cookie_row->islogin; 
    $idadmin=$user_cookie_row->idadmin; 
} 
?> 

подключения страницы:

<?php 
$cn = mysql_connect("localhost","root",""); 
mysql_select_db("***"); 
?> 

почему? Он отлично работает на localhost, когда я хочу загрузить его на сервер, этот сценарий происходит.

+1

Так что проверьте настройки файлов cookie. Что-то заставляет cookie сессии быть потерянным/переписанным/измененным. Если cookie сеанса не может/не будет отправлен обратно точно, PHP просто начнет новый сеанс и попытается установить еще один файл cookie. –

+0

Поскольку он работает в mysql, я думаю, что что-то не так в php.ini. Если у вас есть доступ к нему, сравните его в своем локальном хосте с сервером. В основном вокруг этой области печенья. Вот быстрая ссылка. http://php.net/manual/en/session.configuration.php – nightgaunt

ответ

2

Этот код выглядит очень плохо. За исключением обычных «ошибок в стиле PHP4» (подробнее об этом позже), для меня это не имеет смысла.

  1. Если вы используете сеансы PHP, зачем вам реплицировать таблицу сеансов в вашей базе данных? Y, используя session_start(), вы уже говорите, что PHP справляется со всеми этими проблемами.
  2. Почему вы получаете доступ к куки-файлам пользователей напрямую?

Я рекомендую вам придерживаться дизайна и следовать ему.
Вы хотите управлять сеансами самостоятельно, включая прохождение идентификаторов сеансов, обработку файлов cookie и т. Д.? Затем не создавайте встроенные сессии PHP (но будьте осторожны: возможность писать неверный код здесь очень высока).
Вы хотите использовать встроенные сессии PHP? Тогда просто придерживайтесь их.

Если вы хотите прикрепить к каждой детали пользователей, как «IsAdmin», вы можете использовать переменные сессии: это то, что они сделаны для :)

<?php 
session_start(); 

if(empty($_SESSION)) { 
    // Redirect to login 
} 
else { 
    if(empty($_SESSION['logged_in'])) { 
     // Redirect to login 
    } 
    else { 
     // User is logged in 

     // Is admin? 
     if(!empty($_SESSION['is_admin'])) { 
      // YES 
     } 
     else { 
      // NO 
     } 
    } 
} 
?> 

Там множество руководств и учебных пособий по использованию сеансов с PHP. Например: http://www.phpro.org/tutorials/Introduction-To-PHP-Sessions.html

Кроме того, убедитесь, что в сеансах php.ini включены. Я настоятельно рекомендую использовать сеансы «cookie_only», то есть никогда не заставляйте PHP передавать идентификатор сеанса как параметр GET или POST. Это приведет к зависанию этих пользователей с отключенными cookie (есть ли еще некоторые?), Но сэкономит все остальные от простых целей для захвата сеанса.

Так говорит ... О вашей "PHP4 стиле" код:

  1. Не используйте mysql_* функции. Они устарели. Используйте MySQLi или PDO и, если возможно, используйте подготовленные заявления. Например, строка mysql_query("select * from session_noti where sid='$user_cookie'"); является идеальным местом для атаки SQL Injection.
  2. Не используйте оператор @. Это плохо! Вместо этого просто проверьте, существует ли переменная с isset() или empty().
Смежные вопросы