简体   繁体   English

PHP session 问题

[英]PHP session problems

I have a login page and a 'member's area' page, the login code is here:我有一个登录页面和一个“会员专区”页面,登录代码在这里:

login.php login.php

if ($account->is_logged_in())
{
    $route->to(ACCOUNT_URL);
}

elseif (isset($_POST['username']))
{
    if ($account->authenticates())
    {
        if ($account->log_in()) $route->to(ACCOUNT_URL);
    }
    else
    {
        $flash->set('error', 'The credentials you provided are incorrect.');
    }
}

the functions (in a different file)函数(在不同的文件中)

public function log_in ()
{
    session_unset();
    session_destroy();

    if(session_start())
    {
        $_SESSION['logged_in'] = true;
        $_SESSION['username'] = $_POST['username'];
    }
}

public function authenticates ()
{
    $username = $_POST['username'];
    $password = $_POST['password'];
    if (ctype_alnum($username) && ctype_alnum($password))
    {
        $username = mysql_real_escape_string(filter_var($username, FILTER_SANITIZE_STRING));
        $password = $this->encrypt(mysql_real_escape_string(filter_var($password, FILTER_SANITIZE_STRING)));

        $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";

        $result = mysql_query($sql);

        if (mysql_num_rows($result) == 1)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}

Then my members area page:然后是我的会员专区页面:

if ($account->is_logged_in())
{
    echo 'logged in';
}
elseif (!$account->is_logged_in())
{
    echo 'not logged in';
    echo session_id();
    print_r($_SESSION['logged_in']);
}

login.php redirects me (meaning it authenticates my account), but when I get to members.php it echoes out 'not logged in' and that is all. login.php 重定向我(意味着它验证我的帐户),但是当我到达 members.php 时,它会回显“未登录”,仅此而已。

You'll need to call session_start() at the top of members.php (and any page that needs to access the $_SESSION .您需要在members.php (以及需要访问$_SESSION的任何页面)顶部调用session_start()

// Must initiate the session to test if logged in.
session_start();
if ($account->is_logged_in())
{
    echo 'logged in';
}
elseif (!$account->is_logged_in())
{
    echo 'not logged in';
    echo session_id();
    print_r($_SESSION['logged_in']);
}

Do you have session_start() at the very beginning of all scripts which use sessions?你在所有使用会话的脚本的开头都有session_start()吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM