Я передаю пользовательскую переменную через сеансы. Он отлично работает на локальном хосте, но однажды на веб-сервере он делает странные вещи.
После входа в систему переменная сеанса работает так, как должна... пока вы не нажмете примерно на три страницы, и она внезапно не сорвется!
Обратите внимание на «Welcome, jordan.
», а не на «Welcome, .
». Также в верхнем левом углу.
Работа сеанса: http://imageshack.us/photo/my-images/32/loggedins.png/
Сессия ПУФ! http://imageshack.us/photo/my-images/515/loggedinno.png/
Код входа/создания переменной сеанса:
<?php
if (!isset($_SESSION['user']))
{
if (isset($_POST['user']))
{
$user = sanitizeString($_POST['user']);
$pass = sanitizeString($_POST['pass']);
if (preg_match($txtMatch,$user))
{
if ($user == "" || $pass == "")
{
$error = "Please enter all required fields";
}
else
{
$query = "SELECT * FROM gtmembers WHERE user='$user'";
$result = queryMysql($query);
$rank = mysql_result($result, 0, 'rank');
if (!mysql_num_rows($result))
{
$error = "Username does not exist.";
}
else
{
$getPass = mysql_result($result, 0, 'pass');
$salt = substr($getPass, 0, 64);
$hash = $salt . $pass;
for ($i = 0; $i < 100000; $i++)
{
$hash = hash('sha256', $hash);
}
$hash = $salt . $hash;
if ($hash == $getPass)
{
if ($rank != "Banned")
{
$userLow = strtolower($user);
$_SESSION['user'] = $userLow;
$_SESSION['rank'] = $rank;
echo <<<_END
<script type="text/javascript">
window.location.href='index.php';
</script>
_END;
echo "Successfully logged in. Click <a href='index.php'>here</a> to continue.";
}
Код заголовка:
<?php //gtheader.php
session_start();
include_once 'gtfunctions.php';
$loggedIn = FALSE;
if (isset($_SESSION['user']))
{
$user = $_SESSION['user'];
if ($user) echo "Current User: $user<br />";
else echo "Current User: None<br />";
$rank = $_SESSION['rank'];
$loggedIn = TRUE;
echo "is set SESSION['user']? Yes";
}
else echo "is set SESSION['user']? No";
echo "<div id='header'><a class='header' href='index.php'> <h1 id='headerTitle'>$appname</h1></a>";
if ($loggedIn == TRUE)
{
$query = "SELECT * FROM gtmessages WHERE recip='$user' AND status='0'";
$result = queryMysql($query);
if (mysql_num_rows($result) == 0) $num = "";
else $num = "[".mysql_num_rows($result)."]";
if ($rank == 'Owner' || $rank == 'Admin')
{
echo "Welcome, <a class='header' href='gtmembers.php?view=$user'>$user</a><a class='header' href='gtmessage.php'>$num</a>. [<a class='header' href='gtlogout.php'>Logout</a>] | <a class='header' href='gtadmin.php'>Admin</a><br />";
}
else
{
echo "Welcome, <a class='header' href='gtmembers.php?view=$user'>$user</a><a class='header' href='gtmessage.php'>$num</a>. [<a class='header' href='gtlogout.php'>Logout</a>]<br />";
}
}
?>
session_start
не отображается в том, что вы разместили. Может быть виновником. Попробуйтеwith
session_start(); посмотреть, что это делает. - person Funk Forty Niner   schedule 22.03.2013session_start();
находится во второй строке кода заголовка, должно быть сверху; и обоих файлов. - person Funk Forty Niner   schedule 22.03.2013Login/Create session variable code:
, они переносятся в другой файл или есть что-то, о чем я не знаю (пока)? - person Funk Forty Niner   schedule 22.03.2013session_start();
перед включенным файлом в header.php. Возможно, в этом файле есть странный символ, из-за которого выходные данные отправляются доsession_start()
. Иногда это может произойти при загрузке из Windows на сервер Linux. Поскольку вы упомянули, что он отлично работает на локальном хосте - person Hanky Panky   schedule 22.03.2013include_once 'gtfunctions.php';
- я должен сказать, что я неpro
, но что, если вместо этого вы попробуетеinclude 'gtfunctions.php';
? Я выбираю соломинку здесь, конечно. - person Funk Forty Niner   schedule 22.03.2013