2017-04-14 91 views
1

php会话变量不会从登录页面转到主页。我可以看到使用正确的值将变量保存在Web服务器上的会话文件中,但第二个页面没有看到它们。看起来每次都会开一个新的会话。会话变量不会转到其他页面

即使成功登录后,主页也会重定向回登录页面。我确实看到在这个问题的论坛上有很多问题。但其中大多数都有相同的解决方案。使用session_start()。

我在这两个页面上都使用了session_start()。

我的实际计划是使用MySQL数据库来保存会话数据。登录页面会将会话数据写入数据库,但主页不会读取它。我正在尝试使用本地文件来消除数据库或使用数据库进行会话管理的代码的任何问题。我仍然有与本地文件相同的问题。

的login.php

<?php 
session_start(); 
if(isset($_POST['submit'])) { 

//sanitize the data 
$user = htmlspecialchars (stripslashes (trim ($_POST['user']))); 
$password = htmlspecialchars (stripslashes (trim ($_POST['password']))); 
$domain = htmlspecialchars (stripslashes (trim ($_POST['domain']))); 
//validate user account from LDAP. 
//once authorized, assign session variables and redirect to home page. 
$_SESSION['accesslevel'] = "III"; 
$_SESSION['loggedin'] = "true"; 
$_SESSION['user'] = $user; 
$_SESSION['name'] = $name; 
header('location:home.php'); 
?> 
`<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<title>Admin Login</title> 
<link rel="stylesheet" href="css/login.css"> 
</head> 
<body> 
<div class="logincontainer"> 
<div class="login"> 
    <h1>Login</h1> 
     <form action="<?php htmlentities(urldecode($_SERVER['PHP_SELF']));?>" 
method="post"> 
     <p><b></b><input type="text" name="user" value="" placeholder="ADM_5- 
2-1" required autocomplete="off"></p> 
     <p><b> </b><input type="password" name="password" value="" 
placeholder="Password" required autocomplete="off"></p> 
     <p><select name="domain"> 
      <option value="DOMAIN">DOMAIN</option> 
      <option value="domain">NANET</option> 
      <option value="domain">EUNET</option> 
      <option value="domain">APNET</option> 
      <option value="domain">JPNET</option> 
     </select> 
     </p> 
     <p class="submit"><input type="submit" name="submit" value="Login"> 
</p> 
    </form> 
</div> 
</div><br> 
<div class="error"> 
    <?php //print_r($_POST);?> 
    <?php //var_dump($_POST);?> 
    <?php //echo $msg;?> 
</div> 
</body> 
</html> 

home.php

<?php 
session_start(); 
if ((!isset($_SESSION['loggedin'])) or ($_SESSION['loggedin'] != true)) { 
header ("location: login.php"); 
} 

<<<<html (php uses session variable (name) for user profile menu>>>>> 

?> 
+1

'的error_reporting(E_ALL); ini_set('display_errors','1');' – AbraCadaver

回答

-1

在你login.php,更改$_SESSION['loggedin'] = "true";$_SESSION['loggedin'] = true;

+3

是的,你(OP)将这个变量声明为“true”作为一个字符串,然后检查它是否为布尔值。一个字符串不是错的,但它也不是真的。 –

+2

@LouisLoudogTrottier一个字符串_is_真,实际上,除非它是空的。 –

+0

它的尴尬!但对敏锐的眼睛的赞誉。我一直在看我的代码几个小时,试图弄清楚它有什么问题。 – Ravi