设置会话变量并在另一页上调用它们

时间:2016-04-23 14:35:05

标签: php arrays session login

我向你们致敬,感谢你们以前的帮助。 有人会想到这个非常简单的错误,它让我失望了几个小时。

在登录页面中,我将登录用户名和密码与数据库值进行比较(验证)。如果它们匹配,我将它们存储在会话变量中并重定向到仪表板页面。

在重定向之前,我打印__($ _SESSION)以查看是否设置了变量。它们的输出为TRUE(会话已设置)。

但是在仪表板上,调用会话变量会返回session!set。 请检查以下代码。

[登录页面]

<?php

session_start();

require_once('../data/conString_mysqli.php');
$uNameErr = $pWordErr = "";
$uName = $pWord = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {

   //*************************************
    if (!empty($_POST["username"])) {
        $uName = test_input($_POST["username"]);
    } else {
        $uNameErr = "Email is required!";
        // check if e-mail address is well-formed
        if (!filter_var($uName, FILTER_VALIDATE_EMAIL)) {
            $uNameErr = "Invalid email format"; 
        }
    }
    if (!empty($_POST["password"])) {
        $pWord = test_input($_POST["password"]);
        $hashed = md5($pWord);
    } else {
        $pWord1Err = "Password is Required!";
        if ($pWord < 8) {
            $pWordErr = "Invalid Password.";
        }
    }

}//end if... IS_POST
    function test_input($data) {
    //require connection file

        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);    
        return $data;
    }//end function
?>

<?php

    if (!empty($uName) && !empty($pWord)){
        $hashed = md5($pWord);

        $read_data = mysqli_query($connect, "SELECT * FROM service_providers WHERE activated='1' AND ppword ='".$hashed."' AND pemail='".$uName."'") or die(mysqli_error());

        $count = mysqli_num_rows($read_data);
        if($count >= 1){/*echo '<script type="text/javascript">alert("Records Found!");</script>';*/

            //store session variables
            $row = mysqli_fetch_array($read_data);
            $_SESSION[ 'serv_pid' ]     = $row[ 'serv_pid' ];
            $_SESSION[ 'providerName' ] = $row[ 'pname' ];

            echo '<script type="text/javascript">alert("Session Name: '.$_SESSION['providerName']." - Session ID: ". $_SESSION['serv_pid'].'");window.location="../dashboard/";</script>'; 

/*echo "<pre>";
print_r ($_SESSION);
echo "</pre>";
*/      
        }else{echo '<script type="text/javascript">alert("Invalid Login Details");window.location="../login/";</script>';

        }
    }
?>

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" style="margin-top: 1.5em;">
<div class="form-group">
<div class="input-group">
<input type="text" name="username" class="form-control text-center" placeholder="username (your email)" value="<?php echo $uName;?>"><span class="error"> <?php echo $uNameErr;?></span>
<span class="input-group-addon btn btn-warning" style="background: #f0ad4e; color: #fff;">
<span class="glyphicon glyphicon-user" style="margin: 0;"></span>
</span>
</div>
</div>
<div class="form-group">
<div class="input-group">
<input type="password" name="password" class="form-control text-center" placeholder="password" value="<?php echo $pWord;?>"><span class="error"> <?php echo $pWordErr;?></span>
<span class="input-group-addon btn btn-warning" style="background: #f0ad4e; color: #fff;">
<span class="glyphicon glyphicon-lock" style="margin: 0;"></span>
</span>
</div>
</div>

<p style="font-size: 16px !important;"><a style="color: #fff; text-decoration: none; margin-top: 2em; display: block;" href="../sign-up/">Don't have an Account? <u>Get one!</u></a> <span style="color:#FF0000; font-weight:bold; text-decoration:underline;"><em><a href="forgot_pass.php" title="Click here to get your password">Forgot your password?</a></em></span></p>
<div class="col-md-6 col-md-offset-3 text-center" style="margin-top: 5px;">
<button type="submit" name="login" class="btn btn-warning btn-lg btn-custom" style="margin-right: 1em; border-width: 3px;">LOGIN</button>
<a href="../sign-up/" class="btn btn-warning" style="background: none !important; border: 3px solid #fff;">SIGN UP</a>
</div>
<div class="clearfix"></div>
</form>

[DASHBOARD PAGE]

<?php
session_start();
echo "<pre>";
print_r ($_SESSION);
echo "</pre>";


/*
if (!isset($_SESSION['serv_pid'])){// or !isset($_SESSION['providerName'])){
    die('<script type="text/javascript">alert("You do not have permission to access beyond the previous page.");window.location="../login/";</script>');
}else{
    $serv_pid = $_SESSION['serv_pid'];
    $pName = $_SESSION['providerName'];
}*/
?>

从登录页面,print_r返回的结果是:

阵 (     [serv_pid] =&gt; 1     [providerName] =&gt;无名 )

但是在进入登录页面时,就像会话被破坏一样。 print_r返回的结果是:

阵 ( )

请帮我解决任何想法。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

当您在PHP中启动会话时,它会设置一个会话cookie,当您在php括号内或第一个echo打印第一个字符时,会话cookie会被发送到浏览器。 我认为问题是当您尝试将用户重定向到仪表板页面时。您正在设置会话,向浏览器写入重定向到另一个页面的脚本,但同时服务器不会停止页面上的处理。

尝试在PHP中使用echo "<script>..."替换header("Location: dashboard.php"),然后执行exit(0);指令。 第一个实际上告诉浏览器重定向到dashboard.php页面(或任何页面),第二个告诉浏览器停止执行页面。

此外,删除?><?php括号之间的空白行。该行实际上将标题与cookie一起发送到浏览器,即使它是空白字符。

答案 1 :(得分:0)

登录页面和发送页面上有多余的session_start()函数。每个session_start()都取消了另一个,变量在进入登录页面之前就被销毁了。

但是,我不得不放弃整个页面并一次重新创建一行。所以,它现在正在工作。

我真的很想欣赏Marco Todisco,他也为我的编码做出了暗示性的回应。