注册成功自动登录有疑问,关于session_start();的问题

注册成功自动登录有疑问,关于session_start();的问题

  1. 下面这部分是之前的做法(没在$_SESSION['user']=$result前直接加上session_start()),不能在注册成功后自动登录

if($obj)

  {

    echo "<script type='text/javascript'>

    alert('注册成功');

    </script>";

    //注册成功自动登录

    $sql = "SELECT * FROM  `student_user` WHERE  `name` =  '{$name}'";

    $obj = $mysqli->query($sql);

    $result = $obj->fetch_all(MYSQLI_ASSOC);

    $_SESSION['user'] = $result;//这里var_dump($_SESSION['user'])出来的也都是正常的

    echo "<script type='text/javascript'>

    window.location.href='index.php';//能够把新注册的用户成功显示在首页,数据也能成功插入到数据库中,但为什么页面跳转到index.php后,始终是未登录的状态,而且在index.php中var_dump($_SESSION['user'])也输出的是null

    </script>";

    exit;

  }

  else

  {

    echo "<script type='text/javascript'>

    alert('注册失败');

    </script>";

    exit;

  }

   

  //下面是index.php页面的登录函数

  function checkLogin(){

    session_start();

    if(!isset($_SESSION['user']) || empty($_SESSION['user']))

    {

        return false;

    }

    return true;

}

  if($login = checkLogin())

{

    $user = $_SESSION['user'];

    var_dump($user);//这里输出null


2.下面是在$_SESSION['user']=$result前直接加上session_start(),然后注册成功后能够自动登录。我的问题是:不知道为什么第一种方法不能自动登录(在检查登陆的函数中有写session_start();)???第一种方法和入门搭建路径中的油画商城项目里面的登陆很相似(也是只在检查登陆的函数中写session_start();并没有像第二种方法直接在$_SESSION['user']=$result前加上session_start())

if($obj)

  {

    echo "<script type='text/javascript'>

    alert('注册成功');

    </script>";

    //注册成功自动登录

    $sql = "SELECT * FROM  `student_user` WHERE  `name` =  '{$name}'";

    $obj = $mysqli->query($sql);

    $result = $obj->fetch_all(MYSQLI_ASSOC);

    session_start();//?????这里有疑问,为什么非要先开启session_start();然后在index.php(有判断登陆的函数checkLogin())页面才能检测到登录的信息,如果不写则一直是未登录状态,但是??但是在上一个php路径课程油画商城项目中那个login.php中就没写session_start()而是在判断密码是否相同时直接写的$_SESSION['user'] = $result;然后跳转到index.php(有判断登陆的函数checkLogin())页面就能检测到登陆的信息

    $_SESSION['user'] = $result;//之前要开启session即session_start();

    echo "<script type='text/javascript'>

    window.location.href='index.php';

    </script>";

    exit;

  }

  else

  {

    echo "<script type='text/javascript'>

    alert('注册失败');

    </script>";

    exit;

  }


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
guly 2018-03-28 14:07:45

你好,session_start() 必须放在输出或赋值之前,应确保先开启,所以在执行以下代码之前应先开启session_start();否则对   $_SESSION['user']赋值成功,index.php文件中开启session_start()也是没有效果的。

$_SESSION['user'] = $result;//这里var_dump($_SESSION['user'])出来的也都是正常的

祝学习愉快!


好帮手慕查理 2018-03-27 17:58:30

您好, $_SESSION['user'] = $result;之前没有开启session_start(),是没有将内容写入到session中的,所以你在index.php页面就找不到内容了。同学可以查看一下油画商城项目中login.php是否包含了其它公共文件,是否在公共文件中开启了session_start()。如若没有,请反馈。如果解决了您的问题,请采纳,祝学习愉快!

  • 提问者 慕粉2152056708 #1
    油画商城项目中login.php包含了其它公共文件,在公共文件中也开启了session_start(),都可以正常运行,效果都出来了。 我的第一种方法中也是包含了公共文件,在公共文件(checkLogin()函数)中开启了session_start()。就是仿照油画商城项目弄得,但是注册成功后不能自动登录,我不知道哪里出了问题
    2018-03-28 12:41:37
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师