简体   繁体   English

PHP-会话不继续,但变量

[英]php - Session Not Carrying Over but Variables Are

I have a page ( index.php ) which has a login form. 我有一个具有登录表单的页面( index.php )。 When a user logs in, it checks the credentials and if correct, creates a session, sets two variables, auth to yes and user to the username , and redirects to another page( pihome.php ) via echoing a javascript window.location.href command. 用户登录时,它将检查凭据,如果正确,则创建一个会话,将两个变量( authyes ,将user设置为username ,并通过回显javascript window.location.href重定向到另一个页面( pihome.php )。命令。 This is where the problem starts. 这是问题开始的地方。 On this page if I run session_start() it used to say session has already been created, ignoring but I was able to access the variables from the previous page. 在此页面上,如果我运行session_start()它曾经说过会话已经创建,可以忽略,但是我能够从上一页访问变量。 Now using an if condition with session_status() it session_start() works. 现在,使用if条件与session_status()session_start()的作品。 I have a Logout button on this page which goes to another page ( Logout.php ). 我在此页面上有一个Logout按钮,该按钮转到另一个页面( Logout.php )。 On that page when I try to run session_destroy() it says a session has not been started and when I try to echo the variables it says they have not been defined. 在该页面上,当我尝试运行session_destroy()它表示会话尚未启动,而当我尝试echo显变量时,它表示它们尚未定义。

While browsing SO for solutions I saw certain solutions that applied to variables not being carried over but I can access them on the pihome.php page but logout.php doesn't let me access them or execute session_destroy() . 在浏览SO的解决方案时,我看到某些解决方案未应用于变量,但是我可以在pihome.php页面上访问它们,但是logout.php不允许我访问它们或执行session_destroy() I would like to know if I'm using the sessions correctly and if I should place session_start() at the beginning of every page and how to correctly access the variables. 我想知道我是否正确使用了会话,是否应该在每个页面的开头放置session_start()以及如何正确访问变量。 Thanks! 谢谢!

index.php index.php

<!DOCTYPE html>
<html>
<head>
<title>PiHome Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet"     href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<script     src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">    </script>
<script     src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js">    </script>
<link rel="stylesheet" href="standardstyle.css">
</head>
<body id="override-background">
<?php
session_start();
?>
<?php
if(isset($_SESSION["Auth"])){
if($_SESSION["Auth"] == "yes"){
    echo '<script type="text/javascript">
        window.location.href = "pihome.php";
        </script>';
}
else{

}}
else{

}
?>

<div class="jumbotron">
<h1 class="text-center">PiHome<br/><small>v1.0.0</small></h1>
</div>

<div class="container-fluid">
<div class="well col-3">
<img src="piHome.png" alt="piHome_logo" class="img-rounded"     style="display:block;"></img>
<h3 class="text-center">Login</h3>
<form role="form" action="index.php" method="post">
  <div class="form-group">
    <label for="user">Username</label>
    <input type="text" class="form-control" id="email" name="user">
  </div>
  <div class="form-group">
    <label for="pwd">Password:</label>
    <input type="password" class="form-control" id="pwd" name="pass">
  </div>
  <div class="checkbox">
    <label><input type="checkbox" name="remember"> Remember me</label>
  </div>
<input type="submit" class="btn btn-primary btn-block" value="Login">
<form>
</div>
</div>


<?php
$server = "localhost";
$user = "root";
$pass = "";
$db = "pihome_users";

//Database Connection
$conn = mysqli_connect($server, $user, $pass, $db);

//Check Connection
if($conn->error){
    die("Connection Failed: "+ $conn.error);
}
if(isset($_POST['user'])){
    //echo "Set<br>";
//User Authentication
$inputuser = $conn->escape_string($_POST['user']);
$inputpass = $conn->escape_string($_POST['pass']);
//echo $inputuser."<br>";
//echo $inputpass."<br>";

$sql = 'SELECT * FROM users WHERE username="'.$inputuser.'"';
//echo $sql;

//Execute
$result = $conn->query($sql);
if($conn->error){
    echo "Load Error";
}
if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    if($inputpass == $row["password"]){
        echo '<div class="alert alert-success fade in">
        <a href="#" class="close" data-dismiss="alert" aria-    label="close">x</a>
        Your credentials are correct
        </div>';
        echo '<script type="text/javascript">
        window.location.href = "pihome.php";
        </script>';
        $_SESSION["Auth"] = "yes";
        $_SESSION["User"] = $inputuser;
    }else{
        echo '<div class="container-fluid"><div class="alert alert-danger     fade in">
        <a href="#" class="close" data-dismiss="alert" aria-    label="close">x</a>
        Your username or password is incorrect!
        </div></div>';
        $_SESSION["Auth"] =false;
    //echo "Success";
    }

} else {
    //echo "Failed";

}
}
else{
    //echo "Not Set";
}

?>


</body>
</html>

pihome.php pihome.php

<!DOCTYPE html>
<html>
<head>
<title>PiHome</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet"         href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    <script         src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">        </script>
<script         src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js">        </script>
<link rel="stylesheet" href="standardstyle.css">
</head>
<body>
<?php
$sessionstate = session_status();
if($sessionstate == 1){
    session_start();
    echo "Started";
}

?>
<?php
if(isset($_SESSION["Auth"])){
    if($_SESSION["Auth"] != "yes"){
        echo '<script type="text/javascript">
            window.location.href = "index.php";
            </script>';
            echo "You are logged in as: ".$_SESSION["User"];
    }else{
        echo "Auth Passed";
        $_SESSION["Auth"] = "yes";
    }
}else{
    echo '<script type="text/javascript">
        window.location.href = "index.php";
        </script>';
    }
?>
<div class="jumbotron">
<h1 class="text-center">PiHome<br/><small>v1.0.0</small></h1>
</div>

<div class="container-fluid">
<div class="well col-3">
<h3 class="text-center">Status</h3>
<div id="status">
</div>
</div>

<script>
function AJAX_JSON_Req( url )
{
    var AJAX_req = new XMLHttpRequest();
    AJAX_req.open( "GET", url, true );
    AJAX_req.setRequestHeader("Content-type", "application/json");

    AJAX_req.onreadystatechange = function()
    {
        if( AJAX_req.readyState == 4 && AJAX_req.status == 200 )
        {
            var response = JSON.parse( AJAX_req.responseText );
            //document.write( response.controls[0].type );
            document.getElementById("status").innerHTML =     response.controls[0].type + " " + response.controls[0].state;
        }
    }
    AJAX_req.send();
}

AJAX_JSON_Req( 'status.json' );
</script>
<a href="logout.php">Logout</a>
</div>

</body>
<html>

logout.php logout.php

<?php
$sessionstate = session_status();
if($sessionstate == 1){
    session_start();
    echo "Started";
    session_unset();
}
else if($sessionstate == 2){
    session_destroy();
    echo "destroyed";
}
/*echo '<script type="text/javascript">
        window.location.href = "index.php";
        </script>';*/
?>

我通过在上面的注释中由rjdown建议的包括<!DOCTYPE html>在内的任何输出之前使用session_start()解决了这一问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM