Несмотря на создание сеанса, когда человек переходит на вторую страницу, он действует так, как будто сеанс никогда не существовал - PullRequest
1 голос
/ 15 декабря 2011

По какой-то причине, несмотря на то, что IsLoggedIn () проверяет сеанс, он действует так, как будто его не существует.

Я использовал это для создания функций

<?php
session_start();
function DoLogin($email, $password)
{
    $sql = "
            SELECT U.id, password, FirstName, LastName
            FROM Users U
                    Join ContactMethods CM On U.id=CM.User_Id
            WHERE CM.`Value` = '$email'
            ";
    $conn = getConnection();
    $result = $conn->query($sql);
    //echo $conn->error;
    $rs = $result->fetch_assoc();
    $conn->close();
    if($rs['password'] == $password)
    {
            $_SESSION['UserId'] = $rs['id'];
            $_SESSION['UserEmail'] = $email;
            $_SESSION['UserName'] = $rs['FirstName'] . ' ' . $rs['LastName'];
    }
}
function IsLoggedIn()
{
    return isset($_SESSION['UserId']);
}

, и этовверху страниц

require_once('inc/loginauth.php'); // calls the script with the functions listed above
   if(isset($_REQUEST['email']))
            DoLogin($_REQUEST['email'],$_REQUEST['password']);
?>

и это для части входа на каждой странице

 <?php
         session_start();
if(IsLoggedIn()){ ?>
            <h2>Welome <?=GetUserName()?>!</h2>     
            <p class="grey">Would You Like to Log Out?</p>
            <p class="grey"><a href="<?=DoLogOut()?>">Log Out</a></p>
        </div>
        <div class="left">
            <!-- Login Form --><? }else{ ?>
    <form method="post">
                        <label class="grey" for="email">Email:</label>
            <input class="field" type="email" name="email" />
            <label class="grey" for="password">Password:</label>
        <input class="field" type="password" name="password" />
        <input type="submit" class="bt_login" value="Log In" />
    </form>
<? } ?> 

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011
  1. Поместите session_start(); в начало второго сценария (если сеанс не запускается автоматически)
  2. Попробуйте var_dump($_SESSION); во втором сценарии, чтобы увидеть, что у вас есть в сеансе.
  3. Не используйте короткие открытые теги PHP <? ?>.Они устарели.Используйте полные теги <?php ?>
1 голос
/ 15 декабря 2011

Попробуйте установить начало сеанса в функции php.

также начальный и конечный разделители <?php if(IsLoggedIn()){ ?>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...