Я читал это раньше:
Как исправить ошибку «Заголовки уже отправлены» в 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, когда я хочу загрузить его на сервер, этот сценарий происходит.
Этот код выглядит очень плохо. За исключением обычных «ошибок в стиле PHP4» (подробнее об этом позже), для меня это не имеет смысла.
Я рекомендую вам придерживаться дизайна и следовать ему.
Вы хотите самостоятельно управлять сеансами, включая прохождение идентификаторов сеансов, обработку файлов 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-стиль»:
mysql_*
. Они устарели. Используйте MySQLi или PDO и, если возможно, используйте подготовленные заявления. Например, строка mysql_query("select * from session_noti where sid='$user_cookie'");
является идеальным местом для атаки SQL Injection. @
. Это плохо! Вместо этого просто проверьте, существует ли переменная с isset()
или empty()
.