Я пытаюсь настроить систему входа для моего веб-сайта, которая требует, чтобы кто-то вошел в систему, чтобы публиковать сообщения. Я установил его с сеансами, и он отлично работает на моем localhost, но не на сервере. Я установил print_r (сеанс) на некоторых страницах, чтобы увидеть, где потеря данных. На странице checklogin.php, которая является страницей, которая запускается при входе в систему, работает нормально. Вот какой код оттуда:
<?php session_name('login_session'); session_start(); mysql_connect("localhost","root","root") or die(mysql_error()); mysql_select_db("date_ideas") or die(mysql_error()); $uname=$_POST['uname']; $uname=mysql_real_escape_string($uname); $pass=$_POST['pass']; $pass=mysql_real_escape_string($pass); $pass=md5($pass); $query="SELECT * FROM users WHERE uname='$uname' AND pass='$pass'"; $result=mysql_query($query) or die(mysql_error()); $numrows=mysql_num_rows($result); echo $numrows; if ($numrows==1) { $_SESSION['login']="1"; $_SESSION['uname']=$uname; echo "<script type='text/javascript'>alert('match');</script>"; print_r($_SESSION); } else { $_SESSION['login']=""; echo "<script type='text/javascript'>alert('Invalid Login');</script>"; echo "<script type='text/javascript'>window.location = 'login.php?uname=$uname'</script>"; } ?>
Когда я отправляю форму с хорошей регистрационной информацией, появляется предупреждение и печать возвращается:
Массив ([login] => 1 [uname] => FrizbeeFanatic14)
Так что в этот момент он работает. Однако, когда я перехожу на главную страницу, печать становится:
Массив ()
Таким образом, он потерял информацию о сеансе. Вот код с главной страницы:
<?php session_name('login_session'); session_start(); ?> <html> <head> <title>Great Date Ideas</title> <link rel="stylesheet" type="text/css" href="mainstyle.css" /> <script type="text/javascript" src="validate.js"></script> <script type="text/javascript" src="cookiecheck.js"></script> </head> <body onload="checkCookie()"> <script type="text/javascript"> if (detect=false) { document.write("You must enable cookies to view this page."); window.stop(); document.execCommand('Stop'); } </script> <div id="home"><?php require("header.php");?></div> <?php print_r($_SESSION); mysql_connect("localhost","root","root") or die(mysql_error()); mysql_select_db("date_ideas") or die(mysql_error()); $result=mysql_query("SELECT * FROM ideas ORDER BY post_date DESC") or die(mysql_error());
Это продолжается, но то, что следует, прекрасно работает.
Таким образом, весь этот код отлично работает на моем локальном хосте, но на сервере я получаю эту ошибку.
Единственный раз, когда у меня была схожая проблема, было то, что я случайно менял домен, идя на другую страницу (от www.mydomain.com
до mydomain.com
и наоборот).
Вы можете сохранить сеанс между различными поддоменами, используя session_set_cookie_params()
:
session_name('login_session'); session_set_cookie_params(0, '/', '.mydomain.com'); session_start();
Изменить: Возможно, это может вам помочь: очень интересная статья: отладка сеанса PHP
Я нашел проблему – каталог сохранения для сеансов PHP был корневым каталогом apache, и я запускал nginx fastcgi. Я только что изменил корневые права для папки, и она работает. Спасибо за тонну за вашу помощь.