Переменные сессии PHP исчезают на новой странице - PullRequest
0 голосов
/ 15 марта 2012

Я пытался выяснить эту проблему, возникающую у меня с файлами cookie PHP и Session.По какой-то причине, когда я перехожу на новую страницу на том же сервере, переменная sesion не заполняется, а session_id ().И потом, если я вернусь и войду снова, это работает ??Я попробовал несколько ссылок здесь и погуглил, но ничего не получается.

class SessionRepository
{

public $errors;

public function StartSession()
{
session_start();
}

public function SetUserSession($userName,$fullName)
{
        // Start session
        $this->StartSession;

        // Make sure there isn't something already set
        /*if (isset($_SESSION['userName']))
            unset($_SESSION['userName']);
        */
        // Make sure there isn't something already set
        /*if (isset($_SESSION['fullName']))
            unset($_SESSION['fullName']);
*/
        $_SESSION['userName'] = $userName;
        $_SESSION['fullName'] = $fullName;


}

public function CheckLogin($userName)
{
        $this->StartSession;
        if(empty($_SESSION[$userName]))
        {
            return false;
        }
        return true;
}

public function DestroyUserSession()
{
    $this->StartSession;

    session_destroy();
}

}






include("useritemrepository.php");
include('UserItem.php');
include('sessionrepository.php');
include('login.php');

if(!isset($_POST['submitcreds']))
{
    LoginPage($loginerror);
}
else
{


if ($_SERVER["REQUEST_METHOD"] == "POST")
{
        $userName = $_POST["userName"];
        $password = md5($_POST["password"]);

        $session = new SessionRepository();
        $userRepository = new UserItemRepository();

        $loggedin = $userRepository->LoginUser($userName,$password);

        if($userRepository->errors !="")
                    echo $userRepository->errors;

        if ($loggedin->UserName =="")
        {
            $loginerror = "Invald Credentials, Please try again";

            LoginPage($loginerror);
        }
        else
        {
        $fullName = $loggedin->FirstName . " " . $loggedin->LastName;

        // Build Session 
        $session->SetUserSession($userName,$fullName);
        echo "Session:" . $_SESSION["fullName"] ." ". $_SESSION["userName"];
        LoggedIn();
        exit();
        }

    }
    }

Тогда вот страница входа (login.php)

session_start();
function LoginPage($loginerror)
{

        <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
        <html>
        <head>
        <title>
        Cold Calling Center
        </title>
        <link rel='stylesheet' href='site.css'/>
        </head>

        <body>

        <br/>
        <br/>
        <br/>
        <div id="wrapper" class="wrapper" width="600px" height="600px">
        <form name="login" action="<? $_SERVER["PHP_SELF"];?>" method="post">
        <span id="login-header" class="login-header"><? echo $loginerror;?></span>
        <br/>
        <br/>
        <span id="header">Welcome to Cold Calling Central</span>

        <table id="login-table">
        <th id="table-header">Login Form</th>
        <tr id="login-row">
        <td id="login-cell">UserName:</td>
        <td id="login-cell"><input type="text" name="userName"/></td>
        </tr>

        <tr id="login-row">
        <td id="login-cell">Password:</td>
        <td id="login-cell"><input type="password" name="password"/></td>
        </tr>
        <tr id="login-row">
        <td id="login-cell"><input type="submit" name="submitcreds" value="Login"/></td>

        </tr>
        <tr id="login-table">
        <td id="login-row"><a href="forgotPassword.php">Forgot Password</a></td>
        </tr>
        <tr id="login-table">
        <td id="login-row"><a href="register.php">Not Registered?</a></td>
        </tr>
        </table>
        <input type="hidden" name="PHP_AUTH_USER"/>

        </form>
        </div>

        </body>

        </html>
 }

function RedirectToPage()
{
$url ="loggedin.php";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >
<head>
<META HTTP-EQUIV="Refresh"
      CONTENT="1; URL=<? 
      /*Redirect user to their page upon update */
      echo $url;?>">
<title>Thank you for logging in</title>
<link rel="stylesheet" type="text/css" media="screen" href="briefing.css"/>
</head>

<body>
<div id="shadow">
<div id="wrapper">
<div id="branding"></div> 
<div id="content">

<h2></h2>


<table class="briefing" width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td colspan="2"><h4>Thank you for logging in <? echo $_SESSION['fullName'];?>.. you are now being redirected to your page!</h4></td>
        <td>&nbsp;</td>
    </tr>



</table>


</div>


</div>
</div>
</body>
</html>
<?
}

function LoggedIn()
{?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="HTML Tclassy for Linux (vers 6 November 2007), see www.w3.org">
<title>Registration</title>
<link rel='stylesheet' href='site.css' type="text/css">
</head>
<body>
    <div id="wrapper" class="wrapper">
        <span id="login-header" class="login-header"><? echo "Welcome: " . $_SESSION['fullName']; ?></span>

                <ul id="menu-List" class="menu-list">
                <li class="list-item"><a class="menu-link" href="loggedin.php">Home</a></li>
                <li class="list-item"><a class="menu-link" href="test.php">Home</a></li>
                <li class="list-item"><a class="menu-link" href="index.php">Home</a></li>
                <li class="list-item"><a class="menu-link" href="index.php">Home</a></li>
                </ul>
    </div>

</body>
</html>
}

А вотстраница одной из ссылок на целевой странице.Когда я использую ссылку, чтобы перейти к test.php (код ниже, он не переносит сессию Полное имя, но если я вернусь и войду снова, он будет работать?

session_start();
echo session_id();
echo "Name: " . $_SESSION["fullName"];

Ответы [ 3 ]

1 голос
/ 15 марта 2012

put session_start (); всегда в самом верху вашей страницы!

, поэтому здесь, вероятно, это будет работать:

   <?
    session_start();
    include("useritemrepository.php");
    include('UserItem.php');
    include('sessionrepository.php');
    include('login.php');
    ...

, потому что: если есть один пробел за пределами (или более) в других файлах, которые вы включаете.Session_start не будет работать.Это пространство будет записано в вывод, и session_start не может изменить заголовок http страницы.Обычно вы получаете сообщение об ошибке / предупреждение / уведомление, когда это происходит.Так что включите ваши ошибки или поищите файл журнала ошибок.Поскольку вы начинаете -> помещаете предупреждения и ошибки в вывод и убедитесь, что вы отключаете их при развертывании.

по сути 3 части adivce:

  1. session_start всегда идет первым
  2. нет html в функциях / классах
  3. извлекает html из вашего кода и включает «html / login.php» с помощью небольших переменных
1 голос
/ 15 марта 2012

Если код вставлен правильно, у вас есть ошибка:

public function SetUserSession($userName,$fullName)
{
    // Start session
    $this->StartSession;

    // Should be
    $this->StartSession();

- Обновление -

// landing page
session_start();
$_SESSION['test'] = 'I am hax0r';

// test page
session_start();
var_dump($_SESSION['test']); // Should output 'I am hax0r'
0 голосов
/ 15 марта 2012

Глядя на

public function CheckLogin($userName)
{
        $this->StartSession;
        if(empty($_SESSION[$userName]))
        {
            return false;
        }
        return true;
}

Я думаю, что это должно читаться:

public function CheckLogin($userName)
{
        $this->StartSession;
        if(empty($_SESSION['userName']))
        {
            return false;
        }
        return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...