【问题标题】:Can't access session variable in a different file in PHP无法在 PHP 中访问不同文件中的会话变量
【发布时间】:2013-12-26 02:06:55
【问题描述】:

我正在尝试一个简单的登录系统,我使用的是 PHP 5.3.8。首先我有一个连接到数据库的 db.php 文件:

<?php
$host = "localhost";
$user = "xxx";
$pass = "xxx";
$db = "moviedb";

$connection = pg_connect ("host=$host dbname=$db user=$user
password=$pass");
if (!$connection)
{
    die("Could not open connection to database server");
}

?>

用户使用表单页面提交用户名和密码。我使用这个文件来检查凭据:

<?php
session_start();

include("db.php");

$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];


$sql="SELECT * FROM users WHERE username='$myusername' and password='$mypassword'";
$result=pg_query($sql);

$count=pg_num_rows($result);

if($count==1){

// Register $myusername, $mypassword and redirect to file "login_success.php"
    $_SESSION['username'] = $myusername;
    echo $_SESSION['username'];
    header("location:homepage.php");
}
else {
    echo "Wrong Username or Password";

}

?>

如果用户名和密码在数据库中,则登录成功并将用户重定向到此页面:

<?php
session_start();
include("db.php");
echo $_SESSION['username'];
echo session_id();
?>

<p>WELCOME!</p>

问题是必须打印索引“用户名”处的会话内容,但我得到一个错误:“未定义的索引:用户名”。我已经尝试了所有方法,并且代码看起来正确,我肯定会束手无策。为什么这不起作用?

这是我的表格:

<form action="checklogin.php" method="post">
    <label>UserName :</label>
    <input type="text" name="myusername"/><br />
    <label>Password :</label>
    <input type="password" name="mypassword"/><br/>
    <input type="submit" value=" Submit "/><br />
</form>

【问题讨论】:

  • 在 session_start 的下方设置会话并检查它是否有效,然后您的 $count 不等于 1
  • 如果 $count 未设置为 1,它会打印“错误的用户名和密码”,所以我确定 $count 是 1。
  • 只需打印会话并将 die 放在您设置会话用户名的位置,然后查看会话用户名中显示的内容
  • 我真的不明白。将会话设置为什么?打印位置
  • 这一行之后:$_SESSION['username'] = $myusername; print_r 会话和 die();实际查看您的会话变量是否已设置

标签: php postgresql session


【解决方案1】:

首先这是行不通的

$_SESSION['username'] = $myusername;
echo $_SESSION['username'];
header("location:homepage.php");

因为您要输出内容,然后您要发送标头。

如果你这样做,页面会输出什么

 print_r($_SESSION);

【讨论】:

  • 我知道,这是调试的结果。 print_r 打印出“Array()”
  • 好的,$myusername 已设置,您确定将帖子值发送到表单页面吗?其次,创建一个新的 php 文件并将其放入其中 然后用 print_r($_SESSION); 再次输出会话
  • 是的,我尝试输入一个常量字符串而不是 $myusername,但没有任何改变。我尝试了你的建议,print_r 正确输出了内容。
  • 尝试做 if (!isset($_SESSION['username'])){ $_SESSION['username'] = $myusername; } 其他{ 回声'错误'; }
【解决方案2】:

我认为 Session 注册的代码很好。 变量 $myusername 不包含任何值,这就是未创建会话并且您收到未定义索引错误的原因。 检查您是否从 FORM $_POST['myusername'] 中获得价值。

$_SESSION['username'] = "testing";

现在尝试打印

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多