session_start () создает новый сеанс при каждой перезагрузке

Я читал это раньше:

Как исправить ошибку «Заголовки уже отправлены» в 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{ } } $user_cookie=@$_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, когда я хочу загрузить его на сервер, этот сценарий происходит.

Related of "session_start () создает новый сеанс при каждой перезагрузке"

Этот код выглядит очень плохо. За исключением обычных «ошибок в стиле 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() .