【问题标题】:Session is not being stored会话没有被存储
【发布时间】:2013-04-28 08:04:57
【问题描述】:

谁能告诉我如何解决这个问题?我花了很多天寻找解决方案,但我找不到。

这是我的问题。

“login.php”文件:

require_once("./include/membersite_config.php");

if(isset ($_POST['submitted']))
{
    if($fgmembersite->Login())
    {
        $fgmembersite->RedirectToURL("login-home.php");
    }
}

**membersite_config . php ** contains host, username, pass, and also calls **fg_membersite . php ** which contains functions:

function Login()
{
    if(empty($_POST['username']))
    {
        $this->HandleError("UserName is empty!");
        return false;
    }

    if(empty($_POST['password']))
    {
        $this->HandleError("Password is empty!");
        return false;
    }

    $username = trim($_POST['username']);
    $password = trim($_POST['password']);

    if(!isset($_SESSION))
    {
        $sessid = session_start();
    }
    if(!$this->CheckLoginInDB($username, $password))
    {
        return false;
    }

    $_SESSION[$this->GetLoginSessionVar()] = $username;

    ** echo empty($_SESSION[$sessionvar])? 'true' : 'false'; **
    return true;
}

function CheckLogin()
{
    if(!isset($_SESSION))
    {
        session_start();
    }

    $sessionvar = $this->GetLoginSessionVar();
    ** echo empty($_SESSION[$sessionvar])? 'true' : 'false'; **

    if(empty($_SESSION[$sessionvar]))
    {
        return false;
    }

    return true;
}

function GetLoginSessionVar()
{
    $retvar = $this->rand_key;
    $retvar = 'usr_' . substr($retvar, 0);
    return $retvar;
}

function CheckLoginInDB($username, $password)
{
    if(!$this->DBLogin())
    {
        $this->HandleError("Database login failed!");
        return false;
    }
    $username = $this->SanitizeForSQL($username);
    $pwdmd5 = $password;
    $qry = "Select name, email from $this->tablename where username='$username' and password='$pwdmd5' and confirmcode='y'";

    $result = mysql_query($qry, $this->connection);

    if(!$result || mysql_num_rows($result) <= 0)
    {
        $this->HandleError("Error logging in. The username or password does not match");
        return false;
    }

    $row = mysql_fetch_assoc($result);

    $_SESSION['name_of_user'] = $row['name'];
    $_SESSION['email_of_user'] = $row['email'];

    return true;
}

**login - home . php ** after successfully logged in:

require_once("./include/membersite_config.php");

if(!$fgmembersite->CheckLogin())
{
    $fgmembersite->RedirectToURL("login.php");
    exit;
}

问题是:我已经回应检查 $_SESSION[] 数组的状态。在我输入正确的用户名和密码后, echo empty($_SESSION[$sessionvar]) ? 'true': 'false';Login函数中显示为false,但在CheckLogin中显示为true。我不知道为什么。

【问题讨论】:

  • session_start() 应该在您的 HTML 模板被打印出来之前在页面的最顶部调用(无论是否存在会话)。
  • @Blender - 你的评论可能是这个问题的正确答案,为什么不把它作为答案发布?
  • 使用 print_r($_SESSION) 和 session_start() 如 user2348272 所说
  • 我尝试在我的 login.php 和 login-home.php 中添加 session_start(),但它并没有解决问题。

标签: php


【解决方案1】:

session_start() 开始通过添加 cookie 或查询参数来识别用户来继续会话。你必须把它放在模板的 very 顶部(在 anything 被打印出来之前,甚至是一个空行),即使用户已经有一个会话: p>

<?php
session_start();
?>

【讨论】:

  • 我注意到他用 session_start 设置了 $sessid 但我相信他想要 session_id()
  • 我尝试将 session_start() 放在 fg_membersite.php 的顶部,但还是一样。尽管 Login 函数返回 true,但 CheckLogin 函数返回 false。
  • 我认为问题是为什么在 Login() 中的 $_Session[] 中的值在进入 CheckLogin() 时消失了。
  • @user2348272:session_start() 到底在哪里?
  • 最终在 logout.php 中调用 session_unset() 和 session_destroy()。我尝试将此试用代码用于计算视图,我在三个不同的浏览器中打开了页面,在每个浏览器中多次打开,但视图始终为 1。我不明白为什么。
猜你喜欢
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 2018-07-26
  • 2016-06-15
  • 1970-01-01
  • 2011-09-19
相关资源
最近更新 更多