【问题标题】:Session variable not stored on other pages会话变量未存储在其他页面上
【发布时间】:2017-12-15 15:42:28
【问题描述】:

我正在使用会话变量将用户的详细信息从登录页面发送到欢迎页面。

这是我的代码:

<?php   

 if(isset($_POST['login']))
 {



 $email=$_POST['email'];
 $pass=md5($_POST['password']);


 $a="SELECT * FROM users WHERE email='$email'AND password='$pass'";
 $log=mysqli_query($con,$a);
$row=mysqli_fetch_array($log);


if(mysqli_num_rows($log)>0){

 $_SESSION['firstname']=$row['first_name'];
$_SESSION['lastname']=$row['last_name'];


header("location:welcome.php");
exit;
}
else{

$er="login failed!";

 }
}

关于 Welcome.php

 <h2>WELCOME : <?php echo $_SESSION['firstname'];?></h2>  <--- line 63-->

但我收到此错误:

注意:未定义的索引:firstname in C:\xampp\htdocs\website\welcome.php 在第 63 行

PS:请不要将其标记为重复我尝试了许多解决方案但没有帮助。我使用了 session_start();在每一页上。

【问题讨论】:

  • 您是否尝试过同时将 session_start() 放在两个文件的顶部?
  • 检查在welcome.php 页面上打印的会话数组。 print_r($_SESSION);
  • 不,我包含了 session_start();在 header.php 中并将其包含在所有页面中。
  • Array ( [username] => basiclearner [session] => mc7dvh7u6n232dc23ipb6l4bok ) 这是我在欢迎时使用 print_r($_SESSION) 得到的 .php basiclearner 是我使用的名称,但它一直给我到处都是同一个名字。
  • 我建议你在设置好名字和姓氏之后和重定向之前检查会话。

标签: php html mysql


【解决方案1】:

使用 session_start() 函数启动会话。

在第一页:

if(mysqli_num_rows($log)>0){


    $row=mysqli_fetch_array($log);
    session_start();
    $_SESSION['firstname']=$row['first_name'];
    $_SESSION['lastname']=$row['last_name'];

    if(isset($_SESSION['firstname']))  
        header("location:welcome.php");
    exit;
}

在第 2 页:您可能在第一行写了这一行:

<?PHP 
  session_start();
 ?>
 <h2>WELCOME : <?php if(isset($_SESSION['firstname']))  {echo $_SESSION['firstname'];}?></h2> 

【讨论】:

  • OP sais: I used session_start(); on every page .
  • 我使用了 session_start();在每一页上。
  • @basiclearner,请确保在您的welcome.php页面中,&lt;?php session_start(); ?&gt;之前没有空格或任何内容
【解决方案2】:

编辑:此答案不正确,我将在评论讨论结束后将其删除。

您获取$log 的第一行,然后检查$log 中的行数是否大于0。虽然您最初有一行,但您获取了它!所以在您检查mysqli_num_rows($log) 时,它将为0,因此永远不要设置$_SESSION['firstname']$_SESSION['lastname']

尝试检查条目数之前获取这样的行:

$a="SELECT * FROM users WHERE email='$email'AND password='$pass'";
$log=mysqli_query($con,$a);

if(mysqli_num_rows($log)>0){


    $row=mysqli_fetch_array($log);

    $_SESSION['firstname']=$row['first_name'];
    $_SESSION['lastname']=$row['last_name'];


    header("location:welcome.php");
    exit;
}

【讨论】:

  • 如果是这种情况,重定向也应该不起作用。
  • @basiclearner 你可以 var_dump $row 并给我们结果吗?
猜你喜欢
  • 2013-03-24
  • 2017-05-21
  • 1970-01-01
  • 2017-09-11
  • 2012-06-17
  • 2014-02-07
  • 1970-01-01
  • 2013-11-10
  • 1970-01-01
相关资源
最近更新 更多